📦📃Dapparat.us
After building out a handful of Dapps in React, I decided to carve out all the common components and provide them in an NPM package.
Should help get a Dapp up and running quickly so you can focus on your functionality, not wrestling with the blockchain and ethereum network.
Watch the demo video using Dapparatus over in the Clevis repo.
A good example and development walkthrough is nifties-vs-nfties.
install
npm install --save dapparatus
import
import { Metamask, Gas, ContractLoader, Transactions, Events, Scaler, Blockie, Address, Button } from "dapparatus"
usage
Dapparatus
const METATX = endpoint:"http://0.0.0.0:10001/" contract:"0xf5bf6541843D2ba2865e9aeC153F28aaD96F6fbc" //accountGenerator: "//account.metatx.io",const WEB3_PROVIDER = 'http://0.0.0.0:8545' <Dapparatus config= DEBUG:false requiredNetwork:'Unknown''Private''Rinkeby' hide:false metatx=METATX newPrivateKey=thisstatenewPrivateKey fallbackWeb3Provider=WEB3_PROVIDER onUpdate={ console ifstateweb3Provider stateweb3 = stateweb3Provider this }/>
PrivateKeyCatcher
If you are using paper wallets or other methods to pass in a private key to dapparatus:
<PrivateKeyCatcher newPrivateKey={ this }/>
Metamask
Looks for injected web3 and provides an interface to the rest of the components. Also displays a nice HUD for users to see what account is logged in, what network they are on, and how much Ethereum they have.
<Metamask /*config={{DEBUG: false, requiredNetwork:['Ropsten'], hide:false}}*/ onUpdate={ console ifstateweb3Provider stateweb3 = stateweb3Provider this }/>
Gas
Keeps track of the best gas price in gwei and delivers it to other components.
<Gas onUpdate={ console this }/>
Transactions
Displays transactions and blocks as progress bars and provides a tx function to make calling smart contract functions and sending transactions easier and more transparent to the user.
<Transactions account=account gwei=gwei web3=web3 block=block avgBlockTime=avgBlockTime etherscan=etherscan onReady={ //loads in tx() function // use to send transactions: tx(contracts.YOURCONTRACT.YOURFUNCTION(),GASLIMIT,TXDATA,TXVALUE,CALLBACK) console this }/>
ContractLoader
Loads your contracts published from Clevis into this.state.contracts.
Note: Contracts must first be injected into the /src folder by running clevis test publish
or clevis test full
.
<ContractLoader key="ContractLoader" config=DEBUG:true web3=web3 require= {return } onReady={ console this }/>
You can then use the customLoader to load dynamic contracts using the ABI from current contracts:
let lootTokenContract = thisstate
Events
Listens for events and parses down the chain. Use an id field for unique keys so it will only fire the onUpdate function when a new event is detected. Provide a filter object to filter indexed fields.
<Events config=hide:false contract=contractsNifties eventName="Create" block=block <-------- current block number! id="_id" filter=_owner:account onUpdate={ console this }/>
Address
Renders an address with the blockie (identicon) and the current balance in Eth.
<Address ...thisstate address=contractsSomeContract_address />
Button
Renders a button
<Button color="green" size="2" onClick={ //do some transaction on button click }> Send </Button>
Blockie
Renders an identicon for an address
<Blockie address=someEthereumAddress config=size:3 />
Scaler
Scales components based on a target screen width vs actual screen width. Get your Dapp looking awesome on mobile.
<Scaler config=startZoomAt:1000origin:"50px 50px"adjustedZoom:13> <img style=position:"absolute"left:10top:10maxHeight:120margin:10 src=titleImage/></Scaler>
Demo App
Ether Jam Jam is a demo app I built that uses Dapparatus for meta transactions: