LayerZero-Labs / solidity-examples
- вторник, 7 ноября 2023 г. в 00:00:14
example contracts
yarn install
yarn test
OmniCounter
overrides _nonblockingLzReceive
and _LzReceive
to easily handle messaging. There are also example for OFT and ONFT which illustrate erc20 and erc721 cross chain functionality.testnet
before going to mainnet 🙏The examples below use two chains, however you could substitute any LayerZero supported chain!
NOTE: the OFTV2 uses uint64 to encode value transfer for compatability of Aptos and Solana.
The deployer is expected to set a lower decimal points like 6 or 8.
If the decimal point is 18, then uint64 can only represent approximately 18 tokens (uint64.max ~= 18 * 10^18).
.env
file (to the root project directory) with your MNEMONIC="your mnemonic"
and fund your wallet in order to deploy!setTrustedRemote()
(step 2). This is a mock deployment that auto mints tokens to msg.sender
npx hardhat --network goerli deploy --tags ExampleOFTV2
npx hardhat --network fuji deploy --tags ExampleOFTV2
only
one another.npx hardhat --network goerli setTrustedRemote --target-network fuji --contract OFTV2Mock
npx hardhat --network fuji setTrustedRemote --target-network goerli --contract OFTV2Mock
npx hardhat --network goerli setMinDstGas --packet-type 0 --target-network fuji --contract OFTV2Mock --min-gas 100000
npx hardhat --network fuji setMinDstGas --packet-type 0 --target-network goerli --contract OFTV2Mock --min-gas 100000
100000
is used for min-gas
in this example, you should set this value based on careful gas consumption analysis.
npx hardhat --network goerli oftv2Send --target-network fuji --qty 42 --contract OFTV2Mock
Pro-tip: Check the ERC20 transactions tab of the destination chain block explorer and await your tokens!
This ONFT contract allows minting of nftId
s on separate chains. To ensure two chains can not mint the same nftId
each contract on each chain is only allowed to mintnftIds
in certain ranges.
Check the ONFT_ARGS
constant defined in ONFT721 deploy script for the specific test configuration used in this demo.
setTrustedRemote()
(step 2).
npx hardhat --network bsc-testnet deploy --tags ONFT721
npx hardhat --network fuji deploy --tags ONFT721
npx hardhat --network bsc-testnet setTrustedRemote --target-network fuji --contract ONFT721Mock
npx hardhat --network fuji setTrustedRemote --target-network bsc-testnet --contract ONFT721Mock
npx hardhat --network bsc-testnet setMinDstGas --target-network fuji --contract ONFT721Mock --packet-type 1 --min-gas 100000
npx hardhat --network fuji setMinDstGas --target-network bsc-testnet --contract ONFT721Mock --packet-type 1 --min-gas 100000
npx hardhat --network bsc-testnet onftMint --contract ONFT721Mock --to-address <address> --token-id 1
npx hardhat --network fuji onftMint --contract ONFT721Mock --to-address <address> --token-id 11
npx hardhat --network bsc-testnet ownerOf --token-id 1 --contract ONFT721Mock
npx hardhat --network fuji ownerOf --token-id 11 --contract ONFT721Mock
npx hardhat --network bsc-testnet onftSend --target-network fuji --token-id 1 --contract ONFT721Mock
npx hardhat --network fuji onftSend --target-network bsc-testnet --token-id 11 --contract ONFT721Mock
npx hardhat --network bsc-testnet ownerOf --token-id 1 --contract ONFT721Mock
npx hardhat --network fuji ownerOf --token-id 1 --contract ONFT721Mock
OmniCounter is a simple contract with a counter. You can only remotely increment the counter!
npx hardhat --network bsc-testnet deploy --tags OmniCounter
npx hardhat --network fuji deploy --tags OmniCounter
npx hardhat --network bsc-testnet setTrustedRemote --target-network fuji --contract OmniCounter
npx hardhat --network fuji setTrustedRemote --target-network bsc-testnet --contract OmniCounter
bsc-testnet
to fuji
!npx hardhat --network bsc-testnet incrementCounter --target-network fuji
Optionally use this command in a separate terminal to watch the counter increment in real-time.
npx hardhat --network fuji ocPoll
Just use our checkWireUpAll task to check if your contracts are wired up correctly. You can use it on the example contracts deployed above.
npx hardhat checkWireUpAll --e testnet --contract ONFT721Mock
npx hardhat checkWireUpAll --e testnet --contract OmniCounter
/contracts
🙌Many of the example contracts make use of LayerZeroEndpointMock.sol which is a nice way to test LayerZero locally!
https://github.com/LayerZero-Labs/set-trusted-remotes
https://layerzero.gitbook.io/docs/technical-reference/testnet/testnet-addresses
https://layerzero.gitbook.io/docs/technical-reference/mainnet/supported-chain-ids
16.13.1