ERC1820/ERC777 Testnet

Description

ERC1820 is a contract that is considered a special case since it requires a few modifications in order to work on Vechain. It is used by ERC777 so failure in ERC1820 inevitably results in failure in ERC777 also. The changes required for deploying ERC1820/ERC777 on testnet were the following:

  1. Chain Tag

  2. Contract Owner address

  3. Contract address passed in constructor

  4. Remove gas fee limitation

Chain Tag

The first change that we have to do is change the chain-tag of the transaction creating the contract from 0(?) to 27(?). Since the contract exists in a compiled form under openzeppelin-contracts/node_modules/@openzeppelin/test-helpers/src/data.js we had to change the binary in that file alongside the address. The two lines that were changed can be seen below:

const ERC1820_REGISTRY_ADDRESS = '0x9E7Bdab150965De05F5425E0827B60b4a1447AEf';
const ERC1820_REGISTRY_DEPLOY_TX = '0xf90a4381f68084fffffffff909edf909ea8080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c002980830c35008080c0b841ac9c42653e0fc87c73bb27349a38d6366689f4b6bab847777b1477295d02d9a312de04dfa074a7de02546cfaa398006833ea4d66ab5765e636f3c036c265cc3101';

We generated the ERC1820_REGISTRY_DEPLOY_TX by using the following test in thor to generate the hex string version of the transaction with the new chain tag. We also had to use the relevant command to query thor to give us the ERC1820_REGISTRY_ADDRESS. Once we had that we updates the two lines in the node module.

Contract address passed in constructor

The last change that we need to do is in ERC777SenderRecipientMock.sol and ERC777.sol respectively. In both cases we changed the line that instantiates IERC1820Registry by changing to the correct contract address.

IERC1820Registry private _erc1820 = IERC1820Registry(0x9E7Bdab150965De05F5425E0827B60b4a1447AEf);
IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x9E7Bdab150965De05F5425E0827B60b4a1447AEf);

Contract Address Owner

We also had to change the address of the contract owner in node_modules/@openzeppelin/test-helpers/src/singletons.js

await send.ether(funder, '0xf077b491b355E64048cE21E3A6Fc4751eEeA77fa', ether('0.08'));

Gas fee Limitation

We had to remove any gas limits that were present in our hardhat.config.js file. With these changes one can deploy ERC1820 on testnet.

ERC777 Specifics

Timeout Increase

For running ERC777.test.js on testnet we also had to make one final change. First, In the modules.export section in the hardhat.config.js add the following line to increase the timeout limit.

  mocha: {
    timeout: 180000
  },

Account Funding

In order to successfully run the tests all 10 accounts that are derived from your seed should be appropriately funded with VTHO. For our ERC777 test we required around 10000 VTHO in the first account and at least a few hundred in all the other 9. An easy way to obtain a large amount of testnet VTHO is to use the testnet faucet and then convert your VET to VTHO using the energy station. You will need to use the Sync2 client and create a new testnet wallet in order to be able to do this.

Last updated