Open devon-bfs opened 1 year ago
соси хуй мудила
пт, 6 жовт. 2023 р. о 16:41 devon-bfs @.***> пише:
I am trying to send an OFNTv2 from fuji to goerli I am running into LayerZero: wrong path data error but cannot see where the contract calls the send function.
Below is my code:
const { ethers } = require("hardhat") require('dotenv').config()
// Initiate token names const NAME = "TestBridge" const SYMBOL = "TESTBRIDGE" const SHARED_DECIMALS = 5
const firstEndpoint = '0x93f54D755A063cE7bB9e6Ac47Eccc8e33411d706' const secondEndpoint = '0xbfD2135BFfbb0B5378b56643c2Df8a87552Bfa23' const firstLZId = 10106 const secondLZId = 10121
// Initiate two ethers instances 1 for each chain const firstProvider = new ethers.JsonRpcProvider(process.env.FUJI_RPC_URL) const secondProvider = new ethers.JsonRpcProvider(process.env.GOERLI_RPC_URL) const firstWallet = new ethers.Wallet(process.env.PRIVATE_KEY, firstProvider) const secondWallet = new ethers.Wallet(process.env.PRIVATE_KEY, secondProvider)
const initialAmount = ethers.parseEther("1.00000001").toString() // 1 ether const amount = ethers.parseEther("1.00000000") const dust = ethers.parseEther("0.00000001")
const abiCoder = ethers.AbiCoder.defaultAbiCoder() const walletAddressBytes32 = abiCoder.encode(["address"], [firstWallet.address])
async function main() { await deployContracts() } main()
// Get contract factories async function deployContracts() { console.log('Getting contract factories...\n') const ERC20 = await ethers.getContractFactory("ERC20Mock", firstWallet) const ProxyOFTV2 = await ethers.getContractFactory("ProxyOFTV2", firstWallet) const OFTV2 = await ethers.getContractFactory("OFTV2", secondWallet)
// const erc20Address = "0xF49c606621280Ec3Be5861c2eb0e919C8d171F54" // const localOFTAddress = "0xBa8a5316744A3Cb4C07f9bEb428447b8Af4448a6" // const remoteOFTAddress = "0x6B50f3dA64742dE3cAC38c818f528A4F90988eCF"
// const erc20 = ERC20.attach(erc20Address) // const localOFT = ProxyOFTV2.attach(localOFTAddress) // const remoteOFT = OFTV2.attach(remoteOFTAddress)
// Deploy ERC20 on Fuji chain // Deploy proxy on Fuji chain // Deploy OFTV2 on Mumbai chain console.log('Deploying Contracts...\n') const erc20ConstructorArgs = [NAME, SYMBOL] const erc20 = await ERC20.deploy(...erc20ConstructorArgs) // Deploy token await erc20.waitForDeployment() const erc20Address = await erc20.getAddress() console.log("ERC20: ", erc20Address)
const localOFTConstructorArgs = [erc20Address, SHARED_DECIMALS, firstEndpoint] const localOFT = await ProxyOFTV2.deploy(...localOFTConstructorArgs) // Deploy proxy to token with token address and local endpoint address await localOFT.waitForDeployment() const localOFTAddress = await localOFT.getAddress() console.log("Fuji OFT: ", localOFTAddress)
const remoteOFTConstructructorArgs = [NAME, SYMBOL, SHARED_DECIMALS, secondEndpoint] const remoteOFT = await OFTV2.deploy(...remoteOFTConstructructorArgs) // Deploy remote token with remote endpoint address await remoteOFT.waitForDeployment() const remoteOFTAddress = await remoteOFT.getAddress() console.log("Remote OFT: ", remoteOFTAddress)
// Set paths console.log('Setting Paths...\n') firstPath = ethers.solidityPacked(["address", "address"], [secondEndpoint, firstEndpoint]) secondPath = ethers.solidityPacked(["address", "address"], [firstEndpoint, secondEndpoint]) await localOFT.setTrustedRemote(secondLZId, firstPath) // for A, set B console.log('Set path for first') await remoteOFT.setTrustedRemote(firstLZId, secondPath) // for B, set A console.log('Set path for second')
// Mint tokens console.log('Minting Tokens...\n') let tx = await erc20.mint(firstWallet, initialAmount) await tx.wait()
// SWAP TOKENS FROM ALICE TO BOB
// 1. Approve the proxy to swap your tokens console.log('Approving Tokens...\n') tx = await erc20.approve(localOFTAddress, initialAmount) await tx.wait()
// Set min gas fee console.log('Setting min dst gas...\n') tx = await localOFT.setMinDstGas(secondLZId, 0, 200000) await tx.wait() tx = await localOFT.setMinDstGas(secondLZId, 1, 200000) await tx.wait() tx = await remoteOFT.setMinDstGas(firstLZId, 0, 200000) await tx.wait() tx = await remoteOFT.setMinDstGas(firstLZId, 1, 200000) await tx.wait()
// 3. Estimate gas console.log('Estimating Fee...\n') let nativeFee = (await localOFT.estimateSendFee( secondLZId, // layezero chain id walletAddressBytes32, initialAmount, false, "0x" )).nativeFee
let adapterParams = ethers.solidityPacked(["uint16", "uint256"], [0, 200000]) // 0 for sendFrom
// 4. Send to end chain console.log('Sending Transaction...\n')
tx = await localOFT.sendFrom( firstWallet.address, // from address to send from secondLZId, // layerzero chain id walletAddressBytes32, // bytes of to address initialAmount, // amount to send [ firstWallet.address, ethers.ZeroAddress, adapterParams ], { value: nativeFee } ) const receipt = await tx.wait() console.log(receipt) console.log('\n\n\nSwap has been made \n\n\n')
// SEND TOKENS BACK TO START CHAIN const halfAmount = amount.div(2)
// 1. Create bytes32 of alice's address const aliceAddressBytes32 = abiCoder.encode(["address"], [firstWallet.address])
// 2. Estimate gas fee nativeFee = (await remoteOFT.estimateSendFee(firstLZId, aliceAddressBytes32, halfAmount, false, "0x")).nativeFee
// 3. Send to alice tx = await remoteOFT.sendFrom( firstWallet.address, firstLZId, aliceAddressBytes32, halfAmount, [firstWallet.address, ethers.ZeroAddress, "0x"], { value: nativeFee } ) const receipt2 = await tx.wait() console.log(receipt2) // TOKENS HAVE BEEN SWAPPED console.log('\n\n\nSwapped back\n\n\n')
}
— Reply to this email directly, view it on GitHub https://github.com/LayerZero-Labs/LayerZero/issues/37, or unsubscribe https://github.com/notifications/unsubscribe-auth/BB26QK2WKYCS3LIP27MHSKTX6ARDXAVCNFSM6AAAAAA5WAIPO6VHI2DSMVQWIX3LMV43ASLTON2WKOZRHEZTANBWGY4DKMI . You are receiving this because you are subscribed to this thread.Message ID: @.***>
соси хуй мудила
As in I need to do more of that or less of that to make the code work?
As in I need to do more of that or less of that to make the code work?
const { ethers } = require("hardhat") require('dotenv').config()
const NAME = "TestBridge" const SYMBOL = "TESTBRIDGE" const SHARED_DECIMALS = 5
const firstEndpoint = '0x93f54D755A063cE7bB9e6Ac47Eccc8e33411d706' const secondEndpoint = '0xbfD2135BFfbb0B5378b56643c2Df8a87552Bfa23' const firstLZId = 10106 const secondLZId = 10121
const firstProvider = new ethers.JsonRpcProvider(process.env.FUJI_RPC_URL) const secondProvider = new ethers.JsonRpcProvider(process.env.GOERLI_RPC_URL) const firstWallet = new ethers.Wallet(process.env.PRIVATE_KEY, firstProvider) const secondWallet = new ethers.Wallet(process.env.PRIVATE_KEY, secondProvider)
const initialAmount = ethers.parseEther("1.00000001").toString() const amount = ethers.parseEther("1.00000000") const dust = ethers.parseEther("0.00000001")
const abiCoder = ethers.AbiCoder.defaultAbiCoder() const walletAddressBytes32 = abiCoder.encode(["address"], [firstWallet.address])
async function main() { await deployContracts() } main()
async function deployContracts() { console.log('Getting contract factories...\n') const ERC20 = await ethers.getContractFactory("ERC20Mock", firstWallet) const ProxyOFTV2 = await ethers.getContractFactory("ProxyOFTV2", firstWallet) const OFTV2 = await ethers.getContractFactory("OFTV2", secondWallet)
console.log('Deploying Contracts...\n') const erc20ConstructorArgs = [NAME, SYMBOL] const erc20 = await ERC20.deploy(...erc20ConstructorArgs) await erc20.waitForDeployment() const erc20Address = await erc20.getAddress() console.log("ERC20: ", erc20Address)
const localOFTConstructorArgs = [erc20Address, SHARED_DECIMALS, firstEndpoint] const localOFT = await ProxyOFTV2.deploy(...localOFTConstructorArgs) await localOFT.waitForDeployment() const localOFTAddress = await localOFT.getAddress() console.log("Fuji OFT: ", localOFTAddress)
const remoteOFTConstructructorArgs = [NAME, SYMBOL, SHARED_DECIMALS, secondEndpoint] const remoteOFT = await OFTV2.deploy(...remoteOFTConstructructorArgs) await remoteOFT.waitForDeployment() const remoteOFTAddress = await remoteOFT.getAddress() console.log("Remote OFT: ", remoteOFTAddress)
console.log('Setting Paths...\n') firstPath = ethers.solidityPacked(["address", "address"], [remoteOFTAddress, localOFTAddress]) secondPath = ethers.solidityPacked(["address", "address"], [localOFTAddress, remoteOFTAddress]) await localOFT.setTrustedRemote(secondLZId, firstPath) console.log('Set path for first: ', firstPath) await remoteOFT.setTrustedRemote(firstLZId, secondPath) console.log('Set path for second: ', secondPath)
console.log('Minting Tokens...\n') let tx = await erc20.mint(firstWallet, initialAmount) await tx.wait()
console.log('Approving Tokens...\n') tx = await erc20.approve(localOFTAddress, initialAmount) await tx.wait()
console.log('Setting min dst gas...\n') tx = await localOFT.setMinDstGas(secondLZId, 0, 200000) await tx.wait() tx = await localOFT.setMinDstGas(secondLZId, 1, 200000) await tx.wait() tx = await remoteOFT.setMinDstGas(firstLZId, 0, 200000) await tx.wait() tx = await remoteOFT.setMinDstGas(firstLZId, 1, 200000) await tx.wait()
console.log('Estimating Fee...\n') let nativeFee = (await localOFT.estimateSendFee( secondLZId, walletAddressBytes32, initialAmount, false, "0x" )).nativeFee
let adapterParams = ethers.solidityPacked(["uint16", "uint256"], [0, 200000])
console.log('Sending Transaction...\n') tx = await localOFT.sendFrom( firstWallet.address, secondLZId, walletAddressBytes32, initialAmount, [ firstWallet.address, ethers.ZeroAddress, adapterParams ], { value: nativeFee } ) const receipt = await tx.wait() console.log(receipt) console.log('\n\n\nSwap has been made \n\n\n')
const halfAmount = amount.div(2)
const aliceAddressBytes32 = abiCoder.encode(["address"], [firstWallet.address])
nativeFee = (await remoteOFT.estimateSendFee(firstLZId, aliceAddressBytes32, halfAmount, false, "0x")).nativeFee
tx = await remoteOFT.sendFrom( firstWallet.address, firstLZId, aliceAddressBytes32, halfAmount, [firstWallet.address, ethers.ZeroAddress, "0x"], { value: nativeFee } ) const receipt2 = await tx.wait() console.log(receipt2) console.log('\n\n\nSwapped back\n\n\n') }
I am trying to send an OFNTv2 from fuji to goerli I am running into
LayerZero: wrong path data
error but cannot see where the contract calls the send function.Below is my code: