To utilize the DAPP Network on another chain as a developer, a two way mapping must first be established between the EOS mainnet account that is staking the DAPP to the service package and the account on the side chain that will use the services. The point of this mapping is to verify that an account on the EOS mainnet has given permission to an account on another chain to be able to bill on the EOS mainnet account's behalf. This mapping must also be verified on the new chain in question. A mainnet account can allow multiple new chain accounts to bill for services.
On the EOS mainnet this mapping is performed with the addaccount
action on the liquidx.dsp
account. On the new chain in question, this is performed with the setlink
action on the account that has deployed the dappservicex.cpp
contract (hopefully dappservicex
for simplicity, but any account name can be used). To figure out what account name this is, a DSP, BP, or community member can be asked.
Guide:
At the smart contract level, the liquidx
box must be unboxed and #define LIQUIDX
must be added at the top of the smart contract which uses the DAPP Network services. In order for the compiler to know which network the contract intends to be deployed on the --sidechain
flag must be passed to zeus compile --sidechain $SIDE_CHAIN_NAME
.
Ensure that you add @eosio.code
to the active permission level of the account. This can be done with the --add-code
flag on the cleos set account permission
command.
The side chain name is the account on the EOS mainnet that has registered the chain. You may find what this contract is by asking a DSP, a BP, or the chain team itself.
2 files must be added. One to the /zeus_boxes/liquidx/models/eosio-chains/
directory and one to the /zeus_boxes/liquidx/models/liquidx-mappings/
directory.
/zeus_boxes/liquidx/models/liquidx-mappings/sidechain_name.dappservices.json
- this maps the dappservices account on the mainnet to the dappservicex account name on the new chain
- sidechain_name - EOS mainnet account that has registered the chain
- mainnet_account - dappservices account on EOS mainnet
- chain_account - dappservicex account on new chain - enter the sidechain_name as the scope for the
chainentry
table, thedappservices_contract
key will list the account name needed
{
"sidechain_name":"",
"mainnet_account":"dappservices",
"chain_account":""
}
/zeus_boxes/liquidx/models/eosio-chains/${CHAIN_ACCOUNT}.json
- this maps the chain's configuration details
- dsp_port - port DSP gateway runs on
- webhook_dapp_port - webhook port
- nodeos_host - nodeos host address
- nodeos_port - nodeos port
- secured - bool true/false for http/https for the nodeos address
- nodeos_state_history_port - port for nodeos state history websocket
- nodeos_p2p_port - nodeos peer 2 peer port
- nodeos_endpoint - full nodeos endpoint
- demux_port - demux port
- name - name of the chain account
- local - bool whether chain is local or not
{
"dsp_port":13016,
"webhook_dapp_port": 8813,
"nodeos_host":"localhost",
"nodeos_port":2424,
"secured":false,
"nodeos_state_history_port":12341,
"nodeos_p2p_port":12451,
"nodeos_endpoint":"http://localhost:2424",
"demux_port":1232,
"name":"CHAIN_ACCOUNT_HERE",
"local":true
}
npm i -g @liquidapps/zeus-cmd
mkir liquidx; cd liquidx
zeus unbox liquidx
export MY_CONTRACT_NAME=
zeus create contract $MY_CONTRACT_NAME
cd zeus_boxes/contracts/eos
# edit MY_CONTRACT_NAME.cpp
cd ../../../
export SIDE_CHAIN_NAME=
zeus compile --sidechain $SIDE_CHAIN_NAME
cd zeus_boxes/contracts/eos
export EOS_ENDPOINT=
export ACCOUNT=
cleos -u $EOS_ENDPOINT set contract $ACCOUNT $MY_CONTRACT_NAME
To use a DSP on a new chain, the consumer must submit an adddsp
command on the new chain on the account that is hosting the dappservicex.cpp
contract.
- owner {name} - name of consumer contract on new chain
- dsp {name} - dsp name on new chain (could be different from the mainnet DSP name), enter the mainnet DSP's account into the
accountlink
table on theliquidx.dsp
contract to find this name
To map an EOS mainnet account to a new chain's account, perform the addaccount
action on the liquidx.dsp
account.
- owner {name} - name of account on the EOS mainnet staked to services
- chain_account {name} - name of account on new chain to use services
- chain_name {name} - account on mainnet that has registered the new chain, should be publicly available from a representative of the chain (DSP, BP, community)
Example cleos command:
cleos -u https://nodes.get-scatter.com:443 push transaction '{"delay_sec":0,"max_cpu_usage_ms":0,"actions":[{"account":"liquidx.dsp","name":"addaccount","data":{"owner":"natdeveloper","chain_account":"liquidxcnsmr","chain_name":"mynewchainnn"},"authorization":[{"actor":"natdeveloper","permission":"active"}]}]}'
To map a new chain's account to the EOS mainnet, navigate to the contract that has deployed the dappservicex.cpp
contract and perform the setlink
action.
- owner {name} - name of account on the new chain to link, using services
- mainnet_owner {name} - name of account on mainnet, staking to services
Example cleos command:
cleos -u $NEW_CHAIN_NODEOS_ENDPOINT push transaction '{"delay_sec":0,"max_cpu_usage_ms":0,"actions":[{"account":"dappservicex","name":"setlink","data":{"owner":"liquidxcnsmr","mainnet_owner":"natdeveloper"},"authorization":[{"actor":"liquidxcnsmr","permission":"active"}]}]}'
In short you have run the adddsp
and the setlink
action on the new chain's dappservicex
account and the addaccount
action on the EOS mainet's liquidx.dsp
account.
The new chain account now has the ability to access any service staked to by the mainnet account.