Smart Contract Steps

Smart contract commands

Unbox LiquidX box

We will unbox the liquidx box to give us all of the logic, contracts, and unit tests
1
mkir liquidx; cd liquidx
2
zeus unbox liquidx
Copied!

Create Contract

Create smart contract, or if you're using thise guide as a part of another guide, you can skip this and go to the compiling section
1
export MY_CONTRACT_NAME=
2
zeus create contract $MY_CONTRACT_NAME
3
cd zeus_boxes/contracts/eos
4
# edit MY_CONTRACT_NAME.cpp
5
cd ../../../
Copied!

Smart Contract Steps

#define LIQUIDX

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.
If you are already using an existing contract such as tokenpegx then this is already handled for you

Adding files to Zeus

2 files must be added and 2 files deleted as to not conflict

liquidx-mappings/sidechain_name.dappservices.json

update sidechain_name to chain_account
/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, the dappservices_contract key will list the account name needed
chain_account for jungle3 is testdappxxxx​
1
{
2
"sidechain_name":"liquidjungl3",
3
"mainnet_account":"dappservices",
4
"chain_account":"testdappxxxx"
5
}
Copied!

eosio-chains/${CHAIN_ACCOUNT}.json

/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
Example
Jungle3
1
{
2
"dsp_port":13016,
3
"webhook_dapp_port": 8813,
4
"nodeos_host":"localhost",
5
"nodeos_port":2424,
6
"secured":false,
7
"nodeos_state_history_port":12341,
8
"nodeos_p2p_port":12451,
9
"nodeos_endpoint":"http://localhost:2424",
10
"demux_port":1232,
11
"name":"CHAIN_ACCOUNT_HERE",
12
"local":true
13
}
Copied!
1
{
2
"dsp_port":3117,
3
"webhook_dapp_port": 8813,
4
"nodeos_host":"localhost",
5
"nodeos_port":2424,
6
"secured":false,
7
"nodeos_state_history_port":12341,
8
"nodeos_p2p_port":12451,
9
"nodeos_endpoint":"http://localhost:2424",
10
"demux_port":1232,
11
"name":"liquidjungl3",
12
"local":true
13
}
Copied!

Remove files:

Removing the following if they exist:
1
rm ./zeus_boxes/liquidx/models/liquidx-mappings/test1.dappservices.json
2
rm ./zeus_boxes/liquidx/models/liquidx-mappings/test1.provider1.json
3
rm ./zeus_boxes/liquidx/models/liquidx-mappings/test1.provider2.json
4
rm ./zeus_boxes/liquidx/models/eosio-chains/test1.json
Copied!

Compile Contract Again with new files

1
export SIDE_CHAIN_NAME=liquidjungl3
2
zeus compile --sidechain $SIDE_CHAIN_NAME
Copied!
Jungle3 sidechain name: liquidjungl3​
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.

dappservices config file

Now let's see why we did all of that, in the ./contracts/eos/dappservices/dappservices.config.hpp we see:
1
#define DAPPSERVICEX_CONTRACT_TESTDAPPXXXX "liquidjungl3"_n
2
​
3
#define DAPPSERVICESA_CONTRACT "dappservices"_n
4
​
5
#ifdef LIQUIDX
6
​
7
#define DAPPSERVICES_CONTRACT DAPPSERVICEX_CONTRACT_TESTDAPPXXXX
8
​
9
#else
10
​
11
#define DAPPSERVICES_CONTRACT DAPPSERVICESA_CONTRACT
12
​
13
#endif
Copied!
If you see _TEST1 at all above, something is wrong and likely you need to remove the files suggested above.

Set Contract

1
cd zeus_boxes/contracts/eos
2
export EOS_ENDPOINT=
3
export ACCOUNT=
4
cleos -u $EOS_ENDPOINT set contract $ACCOUNT $MY_CONTRACT_NAME
Copied!
​