Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// Transfer out to Cosmos, locking coins
// =====================================
await usdc_eth_lp.functions.approve(gravity.address, lp_provider_balance);
// Swap the signer of Gravity to the whale liqudity provider.
let gravity_lp_signer = gravity.connect(lp_signer);
await gravity_lp_signer.functions.sendToCosmos(
usdc_eth_lp.address,
ethers.utils.formatBytes32String("myCosmosAddress"),
lp_balance_to_send *500
);
let post_gas_balance = await ethers.provider.getBalance(await lp_signer.getAddress());
console.log(`Post_gas_balance ${post_gas_balance}`);
// Prepare batch
// ===============================
// This code prepares the batch of transactions by encoding the arguments to the logicContract.
// This batch contains 10 transactions which each:
// - Transfer 5 coins to the logic contract
// - Call transferTokens on the logic contract, transferring 2+2 coins to signer 20
//
// After the batch runs, signer 20 should have 40 coins, Gravity should have 940 coins,
// and the logic contract should have 10 coins
const numTxs = 3;
const txPayloads = new Array(numTxs);
const withdrawalId = buddyDeployEvents[0].withdrawalId
const logs = await BridgeHelper.getWithdrawalsInL2Transaction(
l2TransactionReceipt,
ethers.provider
)
const filteredLogs = logs.filter(log => log.uniqueId.eq(withdrawalId))
if (filteredLogs.length !== 1)
throw new Error('Should have exactly one matching unique id')
const { batchNumber, indexInBatch } = filteredLogs[0]
const proofData = await BridgeHelper.tryGetProof(
batchNumber,
indexInBatch,
ethers.provider
)
console.log(JSON.stringify(proofData))
// return proofData;
}
console.log(`erc20 proxy at ${standardArbERC20Proxy.address}`)
const standardArbERC777Proxy = await UpgradeableBeacon.deploy(
standardArbERC777Logic.address
)
await standardArbERC777Proxy.deployed()
console.log(`erc777 proxy at ${standardArbERC777Proxy.address}`)
const contracts = JSON.stringify({
...deployments,
// standardArbERC20: standardArbERC20Logic.address,
// standardArbERC777: standardArbERC777Logic.address,
standardArbERC20: standardArbERC20Proxy.address,
standardArbERC777: standardArbERC777Proxy.address,
l2ChainId: ethers.BigNumber.from(
ethers.provider.network.chainId
).toHexString(),
})
const path = './deployment.json'
console.log(`Writing to JSON at ${path}`)
// TODO: should append/check if previous entries
writeFileSync(path, contracts)
console.log('Almost done')
await deploy1820Registry(accounts[0])
console.log('Done')
}
async function main() {
const accounts = await ethers.getSigners()
const rollupCreator = RollupCreator__factory.connect(
prevAddresses.rollupCreator,
ethers.provider
)
const rollupCreatorOwner = await rollupCreator.owner()
if (accounts[0].address.toLowerCase() !== rollupCreatorOwner.toLowerCase()) {
throw new Error('Current account must be rollup creator owner')
}
const linkedBridgeCreator = await rollupCreator.bridgeCreator()
const linkedRollupTemplate = await rollupCreator.rollupTemplate()
const linkedChallengeFactory = await rollupCreator.challengeFactory()
const linkedNodeFactory = await rollupCreator.nodeFactory()
// check if current linked templates match the supplied previous ones
if (
linkedBridgeCreator.toLowerCase() !==
prevAddresses.bridgeCreator.toLowerCase()
const deployFn: DeployFunction = async (hre) => {
const { deployer } = await hre.getNamedAccounts()
// Fund all default hardhat signers with ETH if deploying on a local hardhat network
const { chainId } = await ethers.provider.getNetwork()
if (chainId === 31337) {
const Proxy__OVM_L1ETHGateway = await getDeployedContract(
hre,
'Proxy__OVM_L1ETHGateway',
{
signerOrProvider: deployer,
iface: 'OVM_L1ETHGateway',
}
)
const signers = await ethers.getSigners()
for (const signer of signers) {
const to = await signer.getAddress()
const l2gas = 8_000_000
const amount = '100'
const value = ethers.utils.parseEther(amount)
await Proxy__OVM_L1ETHGateway.depositTo(to, l2gas, '0x', { value })
throw new Error('Rollup was not created')
}
const rollupInstance = Rollup__factory.connect(
prevAddresses.rollup,
ethers.provider
)
const rollupOwner = await rollupInstance.owner()
if (rollupOwner.toLowerCase() !== accounts[0].address.toLowerCase()) {
throw new Error('Current account must be rollup owner')
}
const proxyAdmin = ProxyAdmin__factory.connect(
adminProxy as string,
ethers.provider
)
// TODO: we can check the direct storage slot as in 'packages/arb-bridge-peripherals/scripts/upgrade_bridge_logic.ts'
const proxyAdminOwner = await proxyAdmin.owner()
if (proxyAdminOwner.toLowerCase() !== accounts[0].address.toLowerCase()) {
throw new Error('Current account must be admin proxy owner')
}
const latestConfirmedNode = await rollupInstance.latestConfirmed()
const latestCreatedNode = await rollupInstance.latestNodeCreated()
if (latestCreatedNode.gt(latestConfirmedNode)) {
await promptUserToContinue()
}
// TODO: let user know if unresolved challenges
async function runTest() {
//Take over the largest liquidity provider for USDC
await network.provider.request({
method: "hardhat_impersonateAccount",
params: ["0x0c731fb0d03211dd32a456370ad2ec3ffad46520"],
});
let lp_signer = await ethers.provider.getSigner(
"0x0c731fb0d03211dd32a456370ad2ec3ffad46520"
);
let starting_lp_eth_balance = await ethers.provider.getBalance(await lp_signer.getAddress());
console.log(`Starting LP eth balance ${starting_lp_eth_balance}`);
let uniswap_router_address = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
let uniswap_router_contact = await IUniswapV2Pair__factory.connect(uniswap_router_address,lp_signer);
let usdc_eth_lp =await IUniswapV2Pair__factory.connect("0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc",lp_signer)
before(async () => {
other = Wallet.createRandom().connect(ethers.provider)
Factory__ERC20 = await ethers.getContractFactory('ERC20', wallet)
})
export const deploy1820Registry = async (signer: SignerWithAddress) => {
const registry1820 = await ethers.provider.getCode(
'0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24'
)
if (registry1820 === '0x') {
console.log('Deploying registry')
const balance = await ethers.provider.getBalance(signer.address)
const requiredBalance = ethers.utils.parseEther('0.08')
if (balance.gte(requiredBalance)) {
await signer.sendTransaction({
to: '0xa990077c3205cbDf861e17Fa532eeB069cE9fF96',
value: requiredBalance,
})
await ethers.provider.sendTransaction(
'0xf90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820'
)
console.log('Deployed registry')
} else {
throw new Error(
`Current account ${await signer.getAddress()} can't prefund 1820 registry`
)
}
} else {
const main = async () => {
if (process.env.L2_TX_HASH && process.env.INBOX_SEQ_NUM)
throw new Error('Either supply the L1 inbox seq num or l2 tx hash')
const l2TxHash =
process.env.L2_TX_HASH ||
(await BridgeHelper.calculateL2RetryableTransactionHash(
BigNumber.from(process.env.INBOX_SEQ_NUM),
ethers.provider
))
const l2TransactionReceipt = await BridgeHelper.getL2Transaction(
l2TxHash,
ethers.provider
)
const buddyDeployEvents = await BridgeHelper.getBuddyDeployInL2Transaction(
l2TransactionReceipt
)
if (buddyDeployEvents.length !== 1)
throw new Error('Buddy deploy event was not triggered one time!')
const withdrawalId = buddyDeployEvents[0].withdrawalId
const logs = await BridgeHelper.getWithdrawalsInL2Transaction(
l2TransactionReceipt,