Hi all! Here is a first draft of the guide. I will most likely update this a few times this week since I'll be adding a contract. I would also look at the commands even more than the addresses, since there may be some newer contracts in deployment. I hope this helps anyone with deploying upgradeable contracts on the mainnet.
SIMPLE CONSENSUS SMART CONTRACT (SCSC) LIBRARY - A guide into how we upgrade and our contract logic
Short Description
A Simple Consensus Smart Contract library for all nodes in XYO
Long Description
This package has been built to streamline the dApp build process for anyone ready to integrate XYO into their project.
Especially crucial in this library are the XyGovernance
and XyStakingConsensus
contracts.
Install
Requirements:
- In the command line go ahead and install using
npm
npx zos link dapp-scsc-solidity
Suggestions:
- Familiarity with
- Solidity
- Web3
- Truffle
- Ganache
Requirements:
- Watch this video on staking a node in XYO
- Check out dApper
- dApper allows you to interact with the smart contracts from the scsc library on the browser
How We Integrated Upgradeability
Below are the commands that we used to deploy the library to Kovan and Mainnet
Special thanks to these blog posts on deploying EVM Packages from ZeppelinOS
Deployer for kovan: 0x316D5E10f4E4ad94499149c0131a44FC17EF995B
Kovan Deploy
npx zos session --network kovan --from 0x316D5E10f4E4ad94499149c0131a44FC17EF995B --expires 5000
// Initialize the contracts for session
npx zos push
npx zos create XyBlockProducer --init initialize
We take note of the address of the contract - 0xb9452ee24cf08eaedf64F3B81f8727f5bd0Ea084
npx zos create PLCRVoting --init initialize --args "0x9071a6fc3c23eb6f4a8f7a2bc2309a7b368f272f"
We take note of the address of the contract - 0x210241f42bC94Eb9da7b4E0A841f3b340B569291
npx zos create XyGovernance --init initialize --args "0x9071a6fc3c23eb6f4a8f7a2bc2309a7b368f272f,0x210241f42bC94Eb9da7b4E0A841f3b340B569291,[400000000000000000000000,172800,172800,172800,50,50,50,66,1000000000000000,1,11520,11520,0,20]"
We take note of the address of the contract - 0xbF68070E5E84cae28f10161088edA1747A5963Ee
npx zos create XyStakingConsensus --init initialize --args "0x9071a6fc3c23eb6f4a8f7a2bc2309a7b368f272f,0xb9452ee24cf08eaedf64F3B81f8727f5bd0Ea084,0xbF68070E5E84cae28f10161088edA1747A5963Ee"
We take note of the address of the contract - 0x1a2C4a6Ffd72848E7bD63d2177c29a0aC80c6386
IPFS:
QmNPKPDj8UjNyy3ewLpyCUAcrAPEZoRtpAFwWtrZP3uEXX XyBlockProducer.json
QmZrbFNd21fY1Q6tJb1hLthaUyfHTEvVc5eJJdSdHQSTXi XyFaucet.json
QmcQhGekFrFGDPSy8epReXyBiYqLLgNd9rCcjMz341pF8L XyGovernance.json
QmTbUrie2GyVm6yJjQ3RHxinQtaqmLdtor1FpsYJD5kiA3 XyStakingConsensus.json
QmTGsMMiy2doKXWyEYci11btTpSQFnFJEowbFhzuVnjTcy kovanABI
Kovan:
0x1a2C4a6Ffd72848E7bD63d2177c29a0aC80c6386 XyStakingConsensus
0xb9452ee24cf08eaedf64F3B81f8727f5bd0Ea084 XyBlockProducer.json
0xbF68070E5E84cae28f10161088edA1747A5963Ee XyGovernance.json
0x9071a6fc3c23eb6f4a8f7a2bc2309a7b368f272f XyFaucet.json
Minimized Kovan:
QmPSNLi99b91AR93AhS7P8TzgETp299R4KurSaFzqn2Dsa XyBlockProducer.json
QmZrbFNd21fY1Q6tJb1hLthaUyfHTEvVc5eJJdSdHQSTXi XyFaucet.json
QmYJhLPmq5GNTQDkWonHV4693YdoEJ1Bt9yz5yz15r6s2Z XyGovernance.json
Qmf6MHXSe4mKYTXbB5nEyUdKagpFo8ZWMSU96rNWqx293D XyStakingConsensus.json
QmYBBNitDFPJVkQkXpZbS16rqJhRU2Eg2teCzaT6jGGY7o minimizedABI
Mainnet Deploy
We change the ZOS Session for mainnet deployment
npx zos session --network mainnet --from 0x6792B02f88b32C4FE8e31cfA41ae5aF44865f930 --expires 5000
Add the contracts to the session
npx zos push
Start initializing the contracts
npx zos create XyBlockProducer --init initialize
0xd3034c290E19959Fdc18E5597F375CA51BFB0c41
npx zos create PLCRVoting --init initialize --args "0x55296f69f40Ea6d20E478533C15A6B08B654E758"
0x72bCDb36d1545FEA06905a1bb4998424580AAee6
npx zos create XyGovernance --init initialize --args "0x55296f69f40Ea6d20E478533C15A6B08B654E758,0x72bCDb36d1545FEA06905a1bb4998424580AAee6,[400000000000000000000000,172800,172800,172800,50,50,50,66,1000000000000000,1,11520,11520,0,20]"
0x01925d0fFE4a6a6162B51ba611e3D4780Fc2dF42
npx zos create XyStakingConsensus --init initialize --args "0x55296f69f40Ea6d20E478533C15A6B08B654E758,0xd3034c290E19959Fdc18E5597F375CA51BFB0c41,0x01925d0fFE4a6a6162B51ba611e3D4780Fc2dF42"
0x0242514106114DEaA99Fd81574142c36Edb03B6D
We minimized the ABI so that we could reduce gas fees and improve performance
Mainnet Minimized ABI:
QmWCMjwu78qSDPzdrHrBL4BzFLLWTgnRgV5HCbf5aQpmhC PLCRVoting.json
Qmc2kRGQQ5GumtFEvZ4EEdZU2nos45bERCbrwxKKYtokxY XYO.json
QmbZBv5LT1CxBG79inzcerG5DEtNwAYyLNUFQaULi5kYiH XyBlockProducer.json
QmcszeMWmdq2ZNLq6vsMtsFvcgVdTCjRSgcXaVgq37aphu XyGovernance.json
QmWkzxNb5yK82y9bDbkr8ucjKYe2QRdpDrP5DN3gTU3gKP XyStakingConsensus.json
QmfXE9DyRAf43fwtYig2RstHbJxxYJjvjAuGqwmEMZmCdj minimized
0x0242514106114DEaA99Fd81574142c36Edb03B6D XyStakingConsensus
0xd3034c290E19959Fdc18E5597F375CA51BFB0c41 XyBlockProducer.json
0x01925d0fFE4a6a6162B51ba611e3D4780Fc2dF42 XyGovernance.json
0x72bCDb36d1545FEA06905a1bb4998424580AAee6 PLCRVoting.json
0x55296f69f40Ea6d20E478533C15A6B08B654E758 XYO
Please note that we followed the steps outlined in the 3 part series, the main changes we had to make were in the arguments per our contract needs.
We were able to successfully deploy these contracts on both Kovan and the mainnet.