From 87b5e88ead616a348239160b240670aa70fd3423 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Fri, 10 May 2024 10:39:47 -0500 Subject: [PATCH 1/5] update FLOW transfer to EVM address to remove need for COA --- .../evm/transfer_flow_to_evm_address.cdc | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/cadence/transactions/evm/transfer_flow_to_evm_address.cdc b/cadence/transactions/evm/transfer_flow_to_evm_address.cdc index 800d0471..305021fc 100644 --- a/cadence/transactions/evm/transfer_flow_to_evm_address.cdc +++ b/cadence/transactions/evm/transfer_flow_to_evm_address.cdc @@ -6,43 +6,35 @@ import "EVM" import "EVMUtils" /// Transfers $FLOW from the signer's account Cadence Flow balance to the recipient's hex-encoded EVM address. -/// Note that a COA must have a $FLOW balance in EVM before transferring value to another EVM address. /// transaction(recipientEVMAddressHex: String, amount: UFix64, gasLimit: UInt64) { - let coa: auth(EVM.Withdraw, EVM.Call) &EVM.CadenceOwnedAccount - let recipientEVMAddress: EVM.EVMAddress var sentVault: @FlowToken.Vault + let recipientEVMAddress: EVM.EVMAddress + let recipientPreBalance: UFix64 prepare(signer: auth(BorrowValue, SaveValue) &Account) { - if signer.storage.type(at: /storage/evm) == nil { - signer.storage.save(<-EVM.createCadenceOwnedAccount(), to: /storage/evm) - } - self.coa = signer.storage.borrow(from: /storage/evm) - ?? panic("Could not borrow reference to the signer's bridged account") - + // Borrow a reference to the signer's FlowToken.Vault and withdraw the amount let vaultRef = signer.storage.borrow( from: /storage/flowTokenVault ) ?? panic("Could not borrow reference to the owner's Vault!") self.sentVault <- vaultRef.withdraw(amount: amount) as! @FlowToken.Vault + // Get the recipient's EVM address self.recipientEVMAddress = EVMUtils.getEVMAddressFromHexString(address: recipientEVMAddressHex) ?? panic("Invalid recipient EVM address") + + // Get the recipient's balance before the transfer to check the amount transferred + self.recipientPreBalance = self.recipientEVMAddress.balance().inFLOW() } execute { - self.coa.deposit(from: <-self.sentVault) - if self.recipientEVMAddress.bytes == self.coa.address().bytes { - return - } - let valueBalance = EVM.Balance(attoflow: 0) - valueBalance.setFLOW(flow: amount) - let callResult = self.coa.call( - to: self.recipientEVMAddress, - data: [], - gasLimit: gasLimit, - value: valueBalance - ) - assert(callResult.status == EVM.Status.successful, message: "Transfer to recipient failed") + // Deposit the amount to the recipient's EVM address + self.recipientEVMAddress.deposit(from: <-self.sentVault) + } + + post { + self.recipientEVMAddress.balance().inFLOW() == self.recipientPreBalance + amount: + "Problem transferring value to EVM address" } } From d20f090b3abd91fb3a621c3d07a76594e36a63d4 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Fri, 10 May 2024 13:35:04 -0500 Subject: [PATCH 2/5] update against new previewnet deployment --- README.md | 14 ++-- ...idged-nft-code-chunks-args-previewnet.json | 2 +- ...ged-token-code-chunks-args-previewnet.json | 2 +- cadence/args/deploy-deployment-registry.json | 14 ++++ .../previewnet/EVMBridgedNFTTemplate.cdc | 14 ++-- .../previewnet/EVMBridgedTokenTemplate.cdc | 16 ++--- flow.json | 64 +++++++++++-------- 7 files changed, 76 insertions(+), 50 deletions(-) create mode 100644 cadence/args/deploy-deployment-registry.json diff --git a/README.md b/README.md index 124a8645..a9956c95 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,13 @@ This repo contains contracts enabling bridging of fungible & non-fungible tokens PreviewNet is currently the only EVM-enabled network on Flow. The bridge in this repo are deployed to the following addresses: -|Network|Address| -|---|---| -|PreviewNet|`0x7d29f084fc7b2b84`| -|Testnet|TBD| -|Mainnet|TBD| +|Contracts|PreviewNet|Testnet|Mainnet| +|---|---|---|---| +|All Cadence Bridge contracts|`0x715c57f7a59bc39b`|TBD|TBD| +|[`FlowEVMBridgeFactory.sol`](./solidity/src/FlowBridgeFactory.sol)|`0xf23c8619603434f7f71659820193c8e491feb1d9`|TBD|TBD| +|[`FlowEVMBridgeDeploymentRegistry.sol`](./solidity/src/FlowEVMBridgeDeploymentRegistry.sol)|`0x544ef4ed9209ebe6989bed9e543632512afb25de`|TBD|TBD| +|[`FlowEVMBridgedERC20Deployer.sol`](./solidity/src/FlowEVMBridgedERC20Deployer.sol)|`0xc5577d2935ef0556b37358d8b92aa578f1e7564e`|TBD|TBD| +|[`FlowEVMBridgedERC721Deployer.sol`](./solidity/src/FlowEVMBridgedERC721Deployer.sol)|`0xd5bf043e8d5e6e007ebfdefebef7f4c96de5d40a`|TBD|TBD| ## Interacting with the bridge @@ -165,7 +167,7 @@ NFT in escrow for the bridge to transfer on fulfillment of the NFT back to EVM. opt-out of bridging, but **importantly must do so before the asset has been onboarded to the bridge**. For Solidity contracts, opting out is as simple as extending the [`BridgePermissions.sol` abstract -contract](./solidity/src/BridgePermissions.sol) which defaults `allowsBridging()` to false. The bridge explicitly checks +contract](./solidity/src/interfaces/BridgePermissions.sol) which defaults `allowsBridging()` to false. The bridge explicitly checks for the implementation of `IBridgePermissions` and the value of `allowsBridging()` to validate that the contract has not opted out of bridging. diff --git a/cadence/args/bridged-nft-code-chunks-args-previewnet.json b/cadence/args/bridged-nft-code-chunks-args-previewnet.json index c6e9c620..9f368f35 100644 --- a/cadence/args/bridged-nft-code-chunks-args-previewnet.json +++ b/cadence/args/bridged-nft-code-chunks-args-previewnet.json @@ -7,7 +7,7 @@ "value": [ { "type": "String", - "value": "696d706f7274204e6f6e46756e6769626c65546f6b656e2066726f6d203078623637363362343339396138383863380a696d706f7274204d6574616461746156696577732066726f6d203078623637363362343339396138383863380a696d706f727420566965775265736f6c7665722066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e2066726f6d203078613032323565373030306163383261390a696d706f727420466c6f77546f6b656e2066726f6d203078343434356537616431313536383237360a0a696d706f72742045564d2066726f6d203078623637363362343339396138383863380a0a696d706f7274204943726f7373564d2066726f6d203078376432396630383466633762326238340a696d706f7274204945564d4272696467654e46544d696e7465722066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d4272696467654e4654457363726f772066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d427269646765436f6e6669672066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d4272696467655574696c732066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d4272696467652066726f6d203078376432396630383466633762326238340a696d706f72742043726f7373564d4e46542066726f6d203078376432396630383466633762326238340a0a2f2f2f205468697320636f6e747261637420697320612074656d706c617465207573656420627920466c6f7745564d42726964676520746f20646566696e652045564d2d6e6174697665204e46547320627269646765642066726f6d20466c6f772045564d20746f20466c6f772e0a2f2f2f2055706f6e206465706c6f796d656e74206f66207468697320636f6e74726163742c2074686520636f6e7472616374206e616d65206973206465726976656420617320612066756e6374696f6e206f6620746865206173736574207479706520286865726520616e2045524337323120616b610a2f2f2f20616e204e46542920616e642074686520636f6e747261637427732045564d20616464726573732e20546865206465726976656420636f6e7472616374206e616d65206973207468656e206a6f696e65642077697468207468697320636f6e7472616374277320636f64652c0a2f2f2f207072657061726564206173206368756e6b7320696e20466c6f7745564d42726964676554656d706c61746573206265666f7265206265696e67206465706c6f79656420746f2074686520466c6f772045564d20427269646765206163636f756e742e0a2f2f2f0a2f2f2f204f6e206272696467696e672c2074686520455243373231206973207472616e7366657272656420746f2074686520627269646765277320436164656e63654f776e65644163636f756e742045564d206164647265737320616e642061206e6577204e4654206973206d696e7465642066726f6d0a2f2f2f207468697320636f6e747261637420746f20746865206272696467696e672063616c6c65722e204f6e2072657475726e20746f20466c6f772045564d2c2074686520726576657273652070726f6365737320697320666f6c6c6f776564202d2074686520746f6b656e206973206c6f636b65640a2f2f2f20696e204e465420657363726f7720616e642074686520455243373231206973207472616e7366657272656420746f2074686520646566696e656420726563697069656e742e20496e2074686973207761792c2074686520436164656e636520746f6b656e206163747320617320610a2f2f2f20726570726573656e746174696f6e206f6620626f7468207468652045564d204e465420616e642074687573206f776e6572736869702072696768747320746f2069742075706f6e206272696467696e67206261636b20746f20466c6f772045564d2e0a2f2f2f0a2f2f2f20546f20627269646765206265747765656e20564d732c20612063616c6c65722063616e20656974686572207573652074686520696e74657266616365206578706f736564206f6e20436164656e63654f776e65644163636f756e74206f722075736520466c6f7745564d4272696467650a2f2f2f207075626c696320636f6e7472616374206d6574686f64732e0a2f2f2f0a61636365737328616c6c2920636f6e747261637420" + "value": "696d706f7274204e6f6e46756e6769626c65546f6b656e2066726f6d203078623637363362343339396138383863380a696d706f7274204d6574616461746156696577732066726f6d203078623637363362343339396138383863380a696d706f727420566965775265736f6c7665722066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e2066726f6d203078613032323565373030306163383261390a696d706f727420466c6f77546f6b656e2066726f6d203078343434356537616431313536383237360a0a696d706f72742045564d2066726f6d203078623637363362343339396138383863380a0a696d706f7274204943726f7373564d2066726f6d203078373135633537663761353962633339620a696d706f7274204945564d4272696467654e46544d696e7465722066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d4272696467654e4654457363726f772066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d427269646765436f6e6669672066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d4272696467655574696c732066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d4272696467652066726f6d203078373135633537663761353962633339620a696d706f72742043726f7373564d4e46542066726f6d203078373135633537663761353962633339620a0a2f2f2f205468697320636f6e747261637420697320612074656d706c617465207573656420627920466c6f7745564d42726964676520746f20646566696e652045564d2d6e6174697665204e46547320627269646765642066726f6d20466c6f772045564d20746f20466c6f772e0a2f2f2f2055706f6e206465706c6f796d656e74206f66207468697320636f6e74726163742c2074686520636f6e7472616374206e616d65206973206465726976656420617320612066756e6374696f6e206f6620746865206173736574207479706520286865726520616e2045524337323120616b610a2f2f2f20616e204e46542920616e642074686520636f6e747261637427732045564d20616464726573732e20546865206465726976656420636f6e7472616374206e616d65206973207468656e206a6f696e65642077697468207468697320636f6e7472616374277320636f64652c0a2f2f2f207072657061726564206173206368756e6b7320696e20466c6f7745564d42726964676554656d706c61746573206265666f7265206265696e67206465706c6f79656420746f2074686520466c6f772045564d20427269646765206163636f756e742e0a2f2f2f0a2f2f2f204f6e206272696467696e672c2074686520455243373231206973207472616e7366657272656420746f2074686520627269646765277320436164656e63654f776e65644163636f756e742045564d206164647265737320616e642061206e6577204e4654206973206d696e7465642066726f6d0a2f2f2f207468697320636f6e747261637420746f20746865206272696467696e672063616c6c65722e204f6e2072657475726e20746f20466c6f772045564d2c2074686520726576657273652070726f6365737320697320666f6c6c6f776564202d2074686520746f6b656e206973206c6f636b65640a2f2f2f20696e204e465420657363726f7720616e642074686520455243373231206973207472616e7366657272656420746f2074686520646566696e656420726563697069656e742e20496e2074686973207761792c2074686520436164656e636520746f6b656e206163747320617320610a2f2f2f20726570726573656e746174696f6e206f6620626f7468207468652045564d204e465420616e642074687573206f776e6572736869702072696768747320746f2069742075706f6e206272696467696e67206261636b20746f20466c6f772045564d2e0a2f2f2f0a2f2f2f20546f20627269646765206265747765656e20564d732c20612063616c6c65722063616e20656974686572207573652074686520696e74657266616365206578706f736564206f6e20436164656e63654f776e65644163636f756e74206f722075736520466c6f7745564d4272696467650a2f2f2f207075626c696320636f6e7472616374206d6574686f64732e0a2f2f2f0a61636365737328616c6c2920636f6e747261637420" }, { "type": "String", "value": "203a204943726f7373564d2c204945564d4272696467654e46544d696e7465722c204e6f6e46756e6769626c65546f6b656e207b0a0a202020202f2f2f20506f696e74657220746f2074686520466163746f7279206465706c6f79656420536f6c696469747920636f6e7472616374206164647265737320646566696e696e672074686520627269646765642061737365740a2020202061636365737328616c6c29206c65742065766d4e4654436f6e7472616374416464726573733a2045564d2e45564d416464726573730a202020202f2f2f204e616d65206f6620746865204e465420636f6c6c656374696f6e20646566696e656420696e2074686520636f72726573706f6e64696e672045524337323120636f6e74726163740a2020202061636365737328616c6c29206c6574206e616d653a20537472696e670a202020202f2f2f2053796d626f6c206f6620746865204e465420636f6c6c656374696f6e20646566696e656420696e2074686520636f72726573706f6e64696e672045524337323120636f6e74726163740a2020202061636365737328616c6c29206c65742073796d626f6c3a20537472696e670a202020202f2f2f20555249206f662074686520636f6e74726163742c20696620617661696c61626c6520617320612076617220696e2063617365207468652062726964676520656e61626c65732063726f73732d564d204d657461646174612073796e63696e6720696e20746865206675747572650a2020202061636365737328616c6c292076617220636f6e74726163745552493a20537472696e673f0a202020202f2f2f2052657461696e206120436f6c6c656374696f6e20746f207265666572656e6365207768656e207265736f6c76696e6720436f6c6c656374696f6e204d657461646174610a202020206163636573732873656c6629206c657420636f6c6c656374696f6e3a2040436f6c6c656374696f6e0a202020202f2f2f204d617070696e67206f6620746f6b656e205552497320696e6465786564206f6e207468656972204552433732312049442e205468697320776f756c64206e6f74206e6f726d616c6c792062652072657461696e65642077697468696e206120436164656e6365204e46540a202020202f2f2f20636f6e74726163742c206275742073696e6365204e4654206d65746164617461206d6179206265207570646174656420696e2045564d2c20697427732072657461696e6564206865726520736f207468617420746865206272696467652063616e207570646174650a202020202f2f2f20697420616761696e73742074686520736f757263652045524337323120636f6e7472616374207768696368206973207472656174656420617320746865204e4654277320736f75726365206f662074727574682e0a2020202061636365737328616c6c29206c657420746f6b656e555249733a207b55496e743235363a20537472696e677d0a0a202020202f2f2f20546865204e4654207265736f7572636520726570726573656e74696e672074686520627269646765642045524337323120746f6b656e0a202020202f2f2f0a2020202061636365737328616c6c29207265736f75726365204e4654203a2043726f7373564d4e46542e45564d4e4654207b0a20202020202020202f2f2f2054686520436164656e6365204944206f6620746865204e46540a202020202020202061636365737328616c6c29206c65742069643a2055496e7436340a20202020202020202f2f2f2054686520455243373231204944206f6620746865204e46540a202020202020202061636365737328616c6c29206c65742065766d49443a2055496e743235360a20202020202020202f2f2f204164646974696f6e616c206f6e636861696e206d657461646174610a202020202020202061636365737328616c6c29206c6574206d657461646174613a207b537472696e673a20416e795374727563747d0a0a2020202020202020696e6974280a20202020202020202020202065766d49443a2055496e743235362c0a2020202020202020202020206d657461646174613a207b537472696e673a20416e795374727563747d0a202020202020202029207b0a20202020202020202020202073656c662e6964203d2073656c662e757569640a20202020202020202020202073656c662e65766d4944203d2065766d49440a20202020202020202020202073656c662e6d65746164617461203d206d657461646174610a20202020202020207d0a0a20202020202020202f2f2f2052657475726e7320746865206d65746164617461207669657720747970657320737570706f727465642062792074686973204e46540a202020202020202061636365737328616c6c2920766965772066756e20676574566965777328293a205b547970655d207b0a20202020202020202020202072657475726e205b0a20202020202020202020202020202020547970653c4d6574616461746156696577732e45564d427269646765644d657461646174613e28292c0a20202020202020202020202020202020547970653c4d6574616461746156696577732e53657269616c3e28292c0a20202020202020202020202020202020547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446174613e28292c0a20202020202020202020202020202020547970653c4d6574616461746156696577732e4e4654436f6c6c656374696f6e446973706c61793e28290a2020202020202020202020205d0a20202020202020207d0a0a202020202020202061636365737328616c6c2920766965772066756e206765744e616d6528293a20537472696e67207b0a20202020202020202020202072657475726e20" diff --git a/cadence/args/bridged-token-code-chunks-args-previewnet.json b/cadence/args/bridged-token-code-chunks-args-previewnet.json index b715eb14..9f81b82a 100644 --- a/cadence/args/bridged-token-code-chunks-args-previewnet.json +++ b/cadence/args/bridged-token-code-chunks-args-previewnet.json @@ -7,7 +7,7 @@ "value": [ { "type": "String", - "value": "696d706f7274204e6f6e46756e6769626c65546f6b656e2066726f6d203078623637363362343339396138383863380a696d706f7274204d6574616461746156696577732066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e4d6574616461746156696577732066726f6d203078613032323565373030306163383261390a696d706f727420566965775265736f6c7665722066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e2066726f6d203078613032323565373030306163383261390a696d706f727420466c6f77546f6b656e2066726f6d203078343434356537616431313536383237360a0a696d706f72742045564d2066726f6d203078623637363362343339396138383863380a0a696d706f7274204943726f7373564d2066726f6d203078376432396630383466633762326238340a696d706f7274204945564d427269646765546f6b656e4d696e7465722066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d427269646765546f6b656e457363726f772066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d427269646765436f6e6669672066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d4272696467655574696c732066726f6d203078376432396630383466633762326238340a696d706f727420466c6f7745564d4272696467652066726f6d203078376432396630383466633762326238340a696d706f72742043726f7373564d4e46542066726f6d203078376432396630383466633762326238340a696d706f72742043726f7373564d546f6b656e2066726f6d203078376432396630383466633762326238340a0a2f2f2f205468697320636f6e747261637420697320612074656d706c617465207573656420627920466c6f7745564d42726964676520746f20646566696e652045564d2d6e61746976652066756e6769626c6520746f6b656e7320627269646765642066726f6d20466c6f772045564d20746f200a2f2f2f20436164656e63652e2055706f6e206465706c6f796d656e74206f66207468697320636f6e74726163742c2074686520636f6e7472616374206e616d65206973206465726976656420617320612066756e6374696f6e206f6620746865206173736574207479706520286865726520616e200a2f2f2f2045524332302920616e642074686520636f6e747261637427732045564d20616464726573732e20546865206465726976656420636f6e7472616374206e616d65206973207468656e206a6f696e65642077697468207468697320636f6e7472616374277320636f64652c0a2f2f2f207072657061726564206173206368756e6b7320696e20466c6f7745564d42726964676554656d706c61746573206265666f7265206265696e67206465706c6f79656420746f2074686520466c6f772045564d20427269646765206163636f756e742e0a2f2f2f0a2f2f2f204f6e206272696467696e672c20746865204552433230206973207472616e7366657272656420746f2074686520627269646765277320436164656e63654f776e65644163636f756e742045564d206164647265737320616e6420746f6b656e7320617265206d696e7465642066726f6d0a2f2f2f207468697320636f6e747261637420746f20746865206272696467696e672063616c6c65722e204f6e2072657475726e20746f20466c6f772045564d2c2074686520726576657273652070726f6365737320697320666f6c6c6f776564202d2074686520746f6b656e206973206275726e65640a2f2f2f20696e207468697320636f6e747261637420616e6420746865204552433230206973207472616e7366657272656420746f2074686520646566696e656420726563697069656e742e20496e2074686973207761792c2074686520436164656e6365205661756c74206163747320617320610a2f2f2f20726570726573656e746174696f6e206f6620626f7468207468652045564d20746f6b656e7320616e642074687573206f776e6572736869702072696768747320746f2069742075706f6e206272696467696e67206261636b20746f20466c6f772045564d2e0a2f2f2f0a2f2f2f20546f20627269646765206265747765656e20564d732c20612063616c6c65722063616e20656974686572207573652074686520696e74657266616365206578706f736564206f6e20436164656e63654f776e65644163636f756e74206f722075736520466c6f7745564d4272696467650a2f2f2f207075626c696320636f6e7472616374206d6574686f64732e0a2f2f2f0a61636365737328616c6c2920636f6e747261637420" + "value": "696d706f7274204e6f6e46756e6769626c65546f6b656e2066726f6d203078623637363362343339396138383863380a696d706f7274204d6574616461746156696577732066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e4d6574616461746156696577732066726f6d203078613032323565373030306163383261390a696d706f727420566965775265736f6c7665722066726f6d203078623637363362343339396138383863380a696d706f72742046756e6769626c65546f6b656e2066726f6d203078613032323565373030306163383261390a696d706f727420466c6f77546f6b656e2066726f6d203078343434356537616431313536383237360a0a696d706f72742045564d2066726f6d203078623637363362343339396138383863380a0a696d706f7274204943726f7373564d2066726f6d203078373135633537663761353962633339620a696d706f7274204945564d427269646765546f6b656e4d696e7465722066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d427269646765546f6b656e457363726f772066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d427269646765436f6e6669672066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d4272696467655574696c732066726f6d203078373135633537663761353962633339620a696d706f727420466c6f7745564d4272696467652066726f6d203078373135633537663761353962633339620a696d706f72742043726f7373564d4e46542066726f6d203078373135633537663761353962633339620a696d706f72742043726f7373564d546f6b656e2066726f6d203078373135633537663761353962633339620a0a2f2f2f205468697320636f6e747261637420697320612074656d706c617465207573656420627920466c6f7745564d42726964676520746f20646566696e652045564d2d6e61746976652066756e6769626c6520746f6b656e7320627269646765642066726f6d20466c6f772045564d20746f200a2f2f2f20436164656e63652e2055706f6e206465706c6f796d656e74206f66207468697320636f6e74726163742c2074686520636f6e7472616374206e616d65206973206465726976656420617320612066756e6374696f6e206f6620746865206173736574207479706520286865726520616e200a2f2f2f2045524332302920616e642074686520636f6e747261637427732045564d20616464726573732e20546865206465726976656420636f6e7472616374206e616d65206973207468656e206a6f696e65642077697468207468697320636f6e7472616374277320636f64652c0a2f2f2f207072657061726564206173206368756e6b7320696e20466c6f7745564d42726964676554656d706c61746573206265666f7265206265696e67206465706c6f79656420746f2074686520466c6f772045564d20427269646765206163636f756e742e0a2f2f2f0a2f2f2f204f6e206272696467696e672c20746865204552433230206973207472616e7366657272656420746f2074686520627269646765277320436164656e63654f776e65644163636f756e742045564d206164647265737320616e6420746f6b656e7320617265206d696e7465642066726f6d0a2f2f2f207468697320636f6e747261637420746f20746865206272696467696e672063616c6c65722e204f6e2072657475726e20746f20466c6f772045564d2c2074686520726576657273652070726f6365737320697320666f6c6c6f776564202d2074686520746f6b656e206973206275726e65640a2f2f2f20696e207468697320636f6e747261637420616e6420746865204552433230206973207472616e7366657272656420746f2074686520646566696e656420726563697069656e742e20496e2074686973207761792c2074686520436164656e6365205661756c74206163747320617320610a2f2f2f20726570726573656e746174696f6e206f6620626f7468207468652045564d20746f6b656e7320616e642074687573206f776e6572736869702072696768747320746f2069742075706f6e206272696467696e67206261636b20746f20466c6f772045564d2e0a2f2f2f0a2f2f2f20546f20627269646765206265747765656e20564d732c20612063616c6c65722063616e20656974686572207573652074686520696e74657266616365206578706f736564206f6e20436164656e63654f776e65644163636f756e74206f722075736520466c6f7745564d4272696467650a2f2f2f207075626c696320636f6e7472616374206d6574686f64732e0a2f2f2f0a61636365737328616c6c2920636f6e747261637420" }, { "type": "String", "value": "203a204943726f7373564d2c204945564d427269646765546f6b656e4d696e7465722c2046756e6769626c65546f6b656e207b0a0a202020202f2f2f20506f696e74657220746f2074686520466163746f7279206465706c6f79656420536f6c696469747920636f6e7472616374206164647265737320646566696e696e672074686520627269646765642061737365740a2020202061636365737328616c6c29206c65742065766d546f6b656e436f6e7472616374416464726573733a2045564d2e45564d416464726573730a202020202f2f2f204e616d65206f66207468652066756e6769626c6520746f6b656e20646566696e656420696e2074686520636f72726573706f6e64696e6720455243323020636f6e74726163740a2020202061636365737328616c6c29206c6574206e616d653a20537472696e670a202020202f2f2f2053796d626f6c206f66207468652066756e6769626c6520746f6b656e20646566696e656420696e2074686520636f72726573706f6e64696e6720455243323020636f6e74726163740a2020202061636365737328616c6c29206c65742073796d626f6c3a20537472696e670a202020202f2f2f20446563696d616c20706c6163652076616c756520646566696e656420696e2074686520736f7572636520455243323020636f6e74726163740a2020202061636365737328616c6c29206c657420646563696d616c733a2055496e74380a202020202f2f2f20555249206f662074686520636f6e74726163742c20696620617661696c61626c6520617320612076617220696e2063617365207468652062726964676520656e61626c65732063726f73732d564d204d657461646174612073796e63696e6720696e20746865206675747572650a2020202061636365737328616c6c292076617220636f6e74726163745552493a20537472696e673f0a202020202f2f2f20546f74616c20737570706c79206f66207468697320436164656e636520746f6b656e20696e2063697263756c6174696f6e0a202020202f2f2f204e4f54453a205468697320646f6573206e6f74207265666c6563742074686520746f74616c20737570706c79206f662074686520736f7572636520455243323020696e2063697263756c6174696f6e2077697468696e2045564d0a2020202061636365737328616c6c292076617220746f74616c537570706c793a205546697836340a202020202f2f2f2052657461696e2061205661756c7420746f207265666572656e6365207768656e207265736f6c76696e67205661756c74204d657461646174610a202020206163636573732873656c6629206c6574207661756c743a20405661756c740a0a202020202f2f2f20546865205661756c74207265736f7572636520726570726573656e74696e6720746865206272696467656420455243323020746f6b656e0a202020202f2f2f0a2020202061636365737328616c6c29207265736f75726365205661756c74203a2043726f7373564d546f6b656e2e45564d546f6b656e496e666f2c2046756e6769626c65546f6b656e2e5661756c74207b0a20202020202020202f2f2f2042616c616e6365206f662074686520746f6b656e7320696e206120676976656e205661756c740a202020202020202061636365737328616c6c29207661722062616c616e63653a205546697836340a0a2020202020202020696e69742862616c616e63653a2055466978363429207b0a20202020202020202020202073656c662e62616c616e6365203d2062616c616e63650a20202020202020207d0a0a20202020202020202f2a202d2d2d2043726f7373564d546f6b656e2e45564d46545661756c7420636f6e666f726d616e6365202d2d2d202a2f0a20202020202020202f2f0a20202020202020202f2f2f204765747320746865204552433230206e616d652076616c75650a202020202020202061636365737328616c6c2920766965772066756e206765744e616d6528293a20537472696e67207b0a20202020202020202020202072657475726e20" diff --git a/cadence/args/deploy-deployment-registry.json b/cadence/args/deploy-deployment-registry.json new file mode 100644 index 00000000..67bf4a0d --- /dev/null +++ b/cadence/args/deploy-deployment-registry.json @@ -0,0 +1,14 @@ +[ + { + "type": "String", + "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610058565b50600080546001600160a01b031916331790556100aa565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6108a5806100b96000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063862119ae11610071578063862119ae146101315780638da5cb5b14610144578063a6de610514610155578063b3d5dbdc14610168578063f2fde38b14610188578063faab9d391461019b57600080fd5b806301ffc9a7146100ae57806304433bbc146100d65780632b20e39714610101578063522791d114610114578063715018a614610129575b600080fd5b6100c16100bc36600461051c565b6101ae565b60405190151581526020015b60405180910390f35b6100e96100e43660046105f0565b6101e5565b6040516001600160a01b0390911681526020016100cd565b6000546100e9906001600160a01b031681565b610127610122366004610649565b610216565b005b6101276102b7565b6100c161013f3660046105f0565b6102cb565b6003546001600160a01b03166100e9565b6100c1610163366004610697565b610308565b61017b610176366004610697565b610334565b6040516100cd91906106d6565b610127610196366004610697565b6103e0565b6101276101a9366004610697565b61041e565b60006001600160e01b0319821663976998cb60e01b14806101df57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60006001826040516101f79190610709565b908152604051908190036020019020546001600160a01b031692915050565b6000546001600160a01b031633146102a95760405162461bcd60e51b815260206004820152604560248201527f466c6f774272696467654465706c6f796d656e7452656769737472793a204f6e60448201527f6c79207265676973747261722063616e207265676973746572206173736f636960648201526430ba34b7b760d91b608482015260a4015b60405180910390fd5b6102b38282610444565b5050565b6102bf61049d565b6102c960006104ca565b565b6000806001600160a01b03166001836040516102e79190610709565b908152604051908190036020019020546001600160a01b0316141592915050565b6001600160a01b0381166000908152600260205260408120805461032b90610725565b15159392505050565b6001600160a01b038116600090815260026020526040902080546060919061035b90610725565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610725565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b50505050509050919050565b6103e861049d565b6001600160a01b03811661041257604051631e4fbdf760e01b8152600060048201526024016102a0565b61041b816104ca565b50565b61042661049d565b600080546001600160a01b0319166001600160a01b03831617905550565b806001836040516104559190610709565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b03948516179055918316600090815260029091522061049883826107af565b505050565b6003546001600160a01b031633146102c95760405163118cdaa760e01b81523360048201526024016102a0565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561052e57600080fd5b81356001600160e01b03198116811461054657600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261057457600080fd5b813567ffffffffffffffff8082111561058f5761058f61054d565b604051601f8301601f19908116603f011681019082821181831017156105b7576105b761054d565b816040528381528660208588010111156105d057600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561060257600080fd5b813567ffffffffffffffff81111561061957600080fd5b61062584828501610563565b949350505050565b80356001600160a01b038116811461064457600080fd5b919050565b6000806040838503121561065c57600080fd5b823567ffffffffffffffff81111561067357600080fd5b61067f85828601610563565b92505061068e6020840161062d565b90509250929050565b6000602082840312156106a957600080fd5b6105468261062d565b60005b838110156106cd5781810151838201526020016106b5565b50506000910152565b60208152600082518060208401526106f58160408501602087016106b2565b601f01601f19169190910160400192915050565b6000825161071b8184602087016106b2565b9190910192915050565b600181811c9082168061073957607f821691505b60208210810361075957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610498576000816000526020600020601f850160051c810160208610156107885750805b601f850160051c820191505b818110156107a757828155600101610794565b505050505050565b815167ffffffffffffffff8111156107c9576107c961054d565b6107dd816107d78454610725565b8461075f565b602080601f83116001811461081257600084156107fa5750858301515b600019600386901b1c1916600185901b1785556107a7565b600085815260208120601f198616915b8281101561084157888601518255948401946001909101908401610822565b508582101561085f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220d34e5f07df9f5caeb3f27cc4ae3fb96f631888efc651830b9b596e5eac76484764736f6c63430008170033" + }, + { + "type": "UInt64", + "value": "12000000" + }, + { + "type": "UFix64", + "value": "0.0" + } +] \ No newline at end of file diff --git a/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc b/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc index 4610b7e8..3109d64b 100644 --- a/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc +++ b/cadence/contracts/templates/previewnet/EVMBridgedNFTTemplate.cdc @@ -6,13 +6,13 @@ import FlowToken from 0x4445e7ad11568276 import EVM from 0xb6763b4399a888c8 -import ICrossVM from 0x7d29f084fc7b2b84 -import IEVMBridgeNFTMinter from 0x7d29f084fc7b2b84 -import FlowEVMBridgeNFTEscrow from 0x7d29f084fc7b2b84 -import FlowEVMBridgeConfig from 0x7d29f084fc7b2b84 -import FlowEVMBridgeUtils from 0x7d29f084fc7b2b84 -import FlowEVMBridge from 0x7d29f084fc7b2b84 -import CrossVMNFT from 0x7d29f084fc7b2b84 +import ICrossVM from 0x715c57f7a59bc39b +import IEVMBridgeNFTMinter from 0x715c57f7a59bc39b +import FlowEVMBridgeNFTEscrow from 0x715c57f7a59bc39b +import FlowEVMBridgeConfig from 0x715c57f7a59bc39b +import FlowEVMBridgeUtils from 0x715c57f7a59bc39b +import FlowEVMBridge from 0x715c57f7a59bc39b +import CrossVMNFT from 0x715c57f7a59bc39b /// This contract is a template used by FlowEVMBridge to define EVM-native NFTs bridged from Flow EVM to Flow. /// Upon deployment of this contract, the contract name is derived as a function of the asset type (here an ERC721 aka diff --git a/cadence/contracts/templates/previewnet/EVMBridgedTokenTemplate.cdc b/cadence/contracts/templates/previewnet/EVMBridgedTokenTemplate.cdc index 4bf355f7..1d89a175 100644 --- a/cadence/contracts/templates/previewnet/EVMBridgedTokenTemplate.cdc +++ b/cadence/contracts/templates/previewnet/EVMBridgedTokenTemplate.cdc @@ -7,14 +7,14 @@ import FlowToken from 0x4445e7ad11568276 import EVM from 0xb6763b4399a888c8 -import ICrossVM from 0x7d29f084fc7b2b84 -import IEVMBridgeTokenMinter from 0x7d29f084fc7b2b84 -import FlowEVMBridgeTokenEscrow from 0x7d29f084fc7b2b84 -import FlowEVMBridgeConfig from 0x7d29f084fc7b2b84 -import FlowEVMBridgeUtils from 0x7d29f084fc7b2b84 -import FlowEVMBridge from 0x7d29f084fc7b2b84 -import CrossVMNFT from 0x7d29f084fc7b2b84 -import CrossVMToken from 0x7d29f084fc7b2b84 +import ICrossVM from 0x715c57f7a59bc39b +import IEVMBridgeTokenMinter from 0x715c57f7a59bc39b +import FlowEVMBridgeTokenEscrow from 0x715c57f7a59bc39b +import FlowEVMBridgeConfig from 0x715c57f7a59bc39b +import FlowEVMBridgeUtils from 0x715c57f7a59bc39b +import FlowEVMBridge from 0x715c57f7a59bc39b +import CrossVMNFT from 0x715c57f7a59bc39b +import CrossVMToken from 0x715c57f7a59bc39b /// This contract is a template used by FlowEVMBridge to define EVM-native fungible tokens bridged from Flow EVM to /// Cadence. Upon deployment of this contract, the contract name is derived as a function of the asset type (here an diff --git a/flow.json b/flow.json index c679a858..d9880c2f 100644 --- a/flow.json +++ b/flow.json @@ -4,7 +4,7 @@ "source": "./cadence/contracts/utils/ArrayUtils.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -20,7 +20,7 @@ "source": "./cadence/contracts/bridge/interfaces/CrossVMNFT.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -28,7 +28,7 @@ "source": "./cadence/contracts/bridge/interfaces/CrossVMToken.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -43,7 +43,7 @@ "source": "./cadence/contracts/utils/EVMUtils.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -69,7 +69,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridge.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -77,7 +77,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeAccessor.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -85,7 +85,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeConfig.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -93,7 +93,7 @@ "source": "./cadence/contracts/bridge/interfaces/FlowEVMBridgeHandlerInterfaces.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -101,7 +101,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeHandlers.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -109,7 +109,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeNFTEscrow.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -117,7 +117,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeTemplates.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -125,7 +125,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeTokenEscrow.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -133,7 +133,7 @@ "source": "./cadence/contracts/bridge/FlowEVMBridgeUtils.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -180,7 +180,7 @@ "source": "./cadence/contracts/bridge/interfaces/IBridgePermissions.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -188,7 +188,7 @@ "source": "./cadence/contracts/bridge/interfaces/ICrossVM.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -196,7 +196,7 @@ "source": "./cadence/contracts/bridge/interfaces/IEVMBridgeNFTMinter.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -204,7 +204,7 @@ "source": "./cadence/contracts/bridge/interfaces/IEVMBridgeTokenMinter.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -212,7 +212,7 @@ "source": "./cadence/contracts/bridge/interfaces/IFlowEVMNFTBridge.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -220,7 +220,7 @@ "source": "./cadence/contracts/bridge/interfaces/IFlowEVMTokenBridge.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -248,7 +248,7 @@ "source": "./cadence/contracts/utils/ScopedFTProviders.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -256,7 +256,7 @@ "source": "./cadence/contracts/utils/Serialize.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -264,7 +264,7 @@ "source": "./cadence/contracts/utils/SerializeMetadata.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", - "previewnet": "7d29f084fc7b2b84", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -272,6 +272,7 @@ "source": "./cadence/contracts/utils/StringUtils.cdc", "aliases": { "emulator": "f8d6e0586b0a20c7", + "previewnet": "715c57f7a59bc39b", "testing": "0000000000000007" } }, @@ -303,7 +304,7 @@ "key": "c1e4c9d9dca9e4d5e9b0b5a9a8e8b9c5d6f4a8b9c5d6f4a8b9c5d6f4a8b9c5d6" }, "flow-evm-bridge-previewnet": { - "address": "7d29f084fc7b2b84", + "address": "715c57f7a59bc39b", "key": { "type": "google-kms", "hashAlgorithm": "SHA2_256", @@ -317,27 +318,27 @@ }, "previewnet": { "flow-evm-bridge-previewnet": [ + "FlowEVMBridgeHandlerInterfaces", "ArrayUtils", "StringUtils", "ScopedFTProviders", + "EVMUtils", "Serialize", "SerializeMetadata", "IBridgePermissions", "ICrossVM", "CrossVMNFT", "CrossVMToken", - "EVMUtils", "FlowEVMBridgeConfig", { "name": "FlowEVMBridgeUtils", "args": [ { "type": "String", - "value": "608060405234801561001057600080fd5b50338061003757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61004081610046565b50610096565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61484a806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000c35760003560e01c8063715018a6116200007a578063715018a6146200018f5780638da5cb5b146200019b578063d56e0ccf14620001ad578063daa09e5414620001e4578063f2fde38b14620001fb578063f93241dd146200021257600080fd5b806304433bbc14620000c85780630a2c0ce914620000fc578063263e0c1b1462000122578063335f4c76146200014a57806340f8d42b146200016157806361a169051462000178575b600080fd5b620000df620000d936600462000c0a565b62000229565b6040516001600160a01b0390911681526020015b60405180910390f35b620001136200010d36600462000c4b565b6200025c565b604051620000f3919062000cd1565b620001396200013336600462000c4b565b62000310565b6040519015158152602001620000f3565b620001396200015b36600462000c4b565b62000724565b620000df6200017236600462000ce6565b62000752565b620000df6200018936600462000ce6565b62000853565b6200019962000942565b005b6000546001600160a01b0316620000df565b620000df620001be36600462000c0a565b80516020818301810180516001825292820191909301209152546001600160a01b031681565b62000139620001f536600462000c4b565b6200095a565b620001996200020c36600462000c4b565b620009da565b620001136200022336600462000c4b565b62000a22565b60006001826040516200023d919062000dc8565b908152604051908190036020019020546001600160a01b031692915050565b6001600160a01b0381166000908152600260205260409020805460609190620002859062000de6565b80601f0160208091040260200160405190810160405280929190818152602001828054620002b39062000de6565b8015620003045780601f10620002d85761010080835404028352916020019162000304565b820191906000526020600020905b815481529060010190602001808311620002e657829003601f168201915b50505050509050919050565b60408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b1790529051600091829182916001600160a01b0386169162000358919062000dc8565b600060405180830381855afa9150503d806000811462000395576040519150601f19603f3d011682016040523d82523d6000602084013e6200039a565b606091505b5091509150811580620003ac57508051155b15620003bc575060009392505050565b604051600060248201526001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b179052516200040b919062000dc8565b600060405180830381855afa9150503d806000811462000448576040519150601f19603f3d011682016040523d82523d6000602084013e6200044d565b606091505b5090925090508115806200046057508051155b1562000470575060009392505050565b60405160006024820181905260448201526001600160a01b0385169060640160408051601f198184030181529181526020820180516001600160e01b0316636eb1769f60e11b17905251620004c6919062000dc8565b600060405180830381855afa9150503d806000811462000503576040519150601f19603f3d011682016040523d82523d6000602084013e62000508565b606091505b5090925090508115806200051b57508051155b156200052b575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516001600160a01b038616916200056b9162000dc8565b600060405180830381855afa9150503d8060008114620005a8576040519150601f19603f3d011682016040523d82523d6000602084013e620005ad565b606091505b509092509050811580620005c057508051155b15620005d0575060009392505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516001600160a01b03861691620006109162000dc8565b600060405180830381855afa9150503d80600081146200064d576040519150601f19603f3d011682016040523d82523d6000602084013e62000652565b606091505b5090925090508115806200066557508051155b1562000675575060009392505050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290516001600160a01b03861691620006b59162000dc8565b600060405180830381855afa9150503d8060008114620006f2576040519150601f19603f3d011682016040523d82523d6000602084013e620006f7565b606091505b5090925090508115806200070a57508051155b156200071a575060009392505050565b5060019392505050565b6001600160a01b03811660009081526002602052604081208054620007499062000de6565b15159392505050565b60006200075e62000ac4565b600080546001600160a01b031687878787876040516200077e9062000b43565b6200078f9695949392919062000e22565b604051809103906000f080158015620007ac573d6000803e3d6000fd5b50905080600185604051620007c2919062000dc8565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b03948516179055918316600090815260029091522062000807858262000f00565b507f99a64021330f1af36b3fd5f64a1d12b99b8ddf91fa553618c4df01ffba4c1cee81888888886040516200084195949392919062000fcd565b60405180910390a19695505050505050565b60006200085f62000ac4565b600080546001600160a01b031687878787876040516200087f9062000b51565b620008909695949392919062000e22565b604051809103906000f080158015620008ad573d6000803e3d6000fd5b50905080600185604051620008c3919062000dc8565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b03948516179055918316600090815260029091522062000908858262000f00565b507fbebce54951ebf20c0dcd195a45bb2388d9ac8e38b5974e00bb63c5822dbe65f081888888886040516200084195949392919062000fcd565b6200094c62000ac4565b62000958600062000af3565b565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401602060405180830381865afa925050508015620009c7575060408051601f3d908101601f19168201909252620009c4918101906200103f565b60015b620009d457506000919050565b92915050565b620009e462000ac4565b6001600160a01b03811662000a1457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b62000a1f8162000af3565b50565b6002602052600090815260409020805462000a3d9062000de6565b80601f016020809104026020016040519081016040528092919081815260200182805462000a6b9062000de6565b801562000abc5780601f1062000a905761010080835404028352916020019162000abc565b820191906000526020600020905b81548152906001019060200180831162000a9e57829003601f168201915b505050505081565b6000546001600160a01b03163314620009585760405163118cdaa760e01b815233600482015260240162000a0b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6118fa806200106483390190565b611eb7806200295e83390190565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000b8757600080fd5b813567ffffffffffffffff8082111562000ba55762000ba562000b5f565b604051601f8301601f19908116603f0116810190828211818310171562000bd05762000bd062000b5f565b8160405283815286602085880101111562000bea57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121562000c1d57600080fd5b813567ffffffffffffffff81111562000c3557600080fd5b62000c438482850162000b75565b949350505050565b60006020828403121562000c5e57600080fd5b81356001600160a01b038116811462000c7657600080fd5b9392505050565b60005b8381101562000c9a57818101518382015260200162000c80565b50506000910152565b6000815180845262000cbd81602086016020860162000c7d565b601f01601f19169290920160200192915050565b60208152600062000c76602083018462000ca3565b600080600080600060a0868803121562000cff57600080fd5b853567ffffffffffffffff8082111562000d1857600080fd5b62000d2689838a0162000b75565b9650602088013591508082111562000d3d57600080fd5b62000d4b89838a0162000b75565b9550604088013591508082111562000d6257600080fd5b62000d7089838a0162000b75565b9450606088013591508082111562000d8757600080fd5b62000d9589838a0162000b75565b9350608088013591508082111562000dac57600080fd5b5062000dbb8882890162000b75565b9150509295509295909350565b6000825162000ddc81846020870162000c7d565b9190910192915050565b600181811c9082168062000dfb57607f821691505b60208210810362000e1c57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b038716815260c06020820181905260009062000e489083018862000ca3565b828103604084015262000e5c818862000ca3565b9050828103606084015262000e72818762000ca3565b9050828103608084015262000e88818662000ca3565b905082810360a084015262000e9e818562000ca3565b9998505050505050505050565b601f82111562000efb576000816000526020600020601f850160051c8101602086101562000ed65750805b601f850160051c820191505b8181101562000ef75782815560010162000ee2565b5050505b505050565b815167ffffffffffffffff81111562000f1d5762000f1d62000b5f565b62000f358162000f2e845462000de6565b8462000eab565b602080601f83116001811462000f6d576000841562000f545750858301515b600019600386901b1c1916600185901b17855562000ef7565b600085815260208120601f198616915b8281101562000f9e5788860151825594840194600190910190840162000f7d565b508582101562000fbd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038616815260a06020820181905260009062000ff39083018762000ca3565b828103604084015262001007818762000ca3565b905082810360608401526200101d818662000ca3565b9050828103608084015262001033818562000ca3565b98975050505050505050565b6000602082840312156200105257600080fd5b8151801515811462000c7657600080fdfe6101606040523480156200001257600080fd5b50604051620018fa380380620018fa833981016040819052620000359162000357565b6040805180820190915260018152603160f81b6020820152859081908882886003620000628382620004db565b506004620000718282620004db565b5050506001600160a01b038116620000a457604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000af816200019f565b50620000bd826006620001f1565b61012052620000ce816007620001f1565b61014052815160208084019190912060e052815190820120610100524660a0526200015c60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506009620001748482620004db565b50600a620001838382620004db565b50600b620001928282620004db565b5050505050505062000601565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602083511015620002115762000209836200022a565b905062000224565b816200021e8482620004db565b5060ff90505b92915050565b600080829050601f8151111562000258578260405163305a27a960e01b81526004016200009b9190620005a7565b80516200026582620005dc565b179392505050565b80516001600160a01b03811681146200028557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002bd578181015183820152602001620002a3565b50506000910152565b600082601f830112620002d857600080fd5b81516001600160401b0380821115620002f557620002f56200028a565b604051601f8301601f19908116603f011681019082821181831017156200032057620003206200028a565b816040528381528660208588010111156200033a57600080fd5b6200034d846020830160208901620002a0565b9695505050505050565b60008060008060008060c087890312156200037157600080fd5b6200037c876200026d565b60208801519096506001600160401b03808211156200039a57600080fd5b620003a88a838b01620002c6565b96506040890151915080821115620003bf57600080fd5b620003cd8a838b01620002c6565b95506060890151915080821115620003e457600080fd5b620003f28a838b01620002c6565b945060808901519150808211156200040957600080fd5b620004178a838b01620002c6565b935060a08901519150808211156200042e57600080fd5b506200043d89828a01620002c6565b9150509295509295509295565b600181811c908216806200045f57607f821691505b6020821081036200048057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004d6576000816000526020600020601f850160051c81016020861015620004b15750805b601f850160051c820191505b81811015620004d257828155600101620004bd565b5050505b505050565b81516001600160401b03811115620004f757620004f76200028a565b6200050f816200050884546200044a565b8462000486565b602080601f8311600181146200054757600084156200052e5750858301515b600019600386901b1c1916600185901b178555620004d2565b600085815260208120601f198616915b82811015620005785788860151825594840194600190910190840162000557565b5085821015620005975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620005c8816040850160208701620002a0565b601f01601f19169190910160400192915050565b80516020808301519190811015620004805760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161129e6200065c6000396000610a8801526000610a5b01526000610918015260006108f00152600061084b015260006108750152600061089f015261129e6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a76b4d5611610097578063dc9716eb11610071578063dc9716eb146102f8578063dd62ed3e14610300578063e8a3d48514610339578063f2fde38b1461034157600080fd5b8063a76b4d56146102ca578063a9059cbb146102d2578063d505accf146102e557600080fd5b8063715018a61461025e57806379cc6790146102665780637ecebe001461027957806384b0196e1461028c5780638da5cb5b146102a757806395d89b41146102c257600080fd5b8063313ce56711610130578063313ce567146101ee5780633644e515146101fd5780633fd4d4a81461020557806340c10f191461020d57806342966c681461022257806370a082311461023557600080fd5b806306fdde0314610178578063095ea7b3146101965780630cd9acb7146101b9578063120a88ad146101c157806318160ddd146101c957806323b872dd146101db575b600080fd5b610180610354565b60405161018d9190610fe8565b60405180910390f35b6101a96101a436600461101e565b6103e6565b604051901515815260200161018d565b610180610400565b61018061048e565b6002545b60405190815260200161018d565b6101a96101e9366004611048565b61049d565b6040516012815260200161018d565b6101cd6104c1565b6101806104d0565b61022061021b36600461101e565b6104df565b005b610220610230366004611084565b6104f5565b6101cd61024336600461109d565b6001600160a01b031660009081526020819052604090205490565b610220610502565b61022061027436600461101e565b610516565b6101cd61028736600461109d565b61052b565b610294610549565b60405161018d97969594939291906110b8565b6005546040516001600160a01b03909116815260200161018d565b61018061058f565b61018061059e565b6101a96102e036600461101e565b6105ab565b6102206102f3366004611151565b6105b9565b6101806106f8565b6101cd61030e3660046111c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610180610705565b61022061034f36600461109d565b610714565b606060038054610363906111f7565b80601f016020809104026020016040519081016040528092919081815260200182805461038f906111f7565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b5050505050905090565b6000336103f481858561074f565b60019150505b92915050565b6009805461040d906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610439906111f7565b80156104865780601f1061045b57610100808354040283529160200191610486565b820191906000526020600020905b81548152906001019060200180831161046957829003601f168201915b505050505081565b606060098054610363906111f7565b6000336104ab858285610761565b6104b68585856107df565b506001949350505050565b60006104cb61083e565b905090565b6060600a8054610363906111f7565b6104e7610969565b6104f18282610996565b5050565b6104ff33826109cc565b50565b61050a610969565b6105146000610a02565b565b610521823383610761565b6104f182826109cc565b6001600160a01b0381166000908152600860205260408120546103fa565b60006060806000806000606061055d610a54565b610565610a81565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b606060048054610363906111f7565b600b805461040d906111f7565b6000336103f48185856107df565b834211156105e25760405163313c898160e11b8152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861062f8c6001600160a01b0316600090815260086020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061068a82610aae565b9050600061069a82878787610adb565b9050896001600160a01b0316816001600160a01b0316146106e1576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016105d9565b6106ec8a8a8a61074f565b50505050505050505050565b600a805461040d906111f7565b6060600b8054610363906111f7565b61071c610969565b6001600160a01b03811661074657604051631e4fbdf760e01b8152600060048201526024016105d9565b6104ff81610a02565b61075c8383836001610b09565b505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146107d957818110156107ca57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016105d9565b6107d984848484036000610b09565b50505050565b6001600160a01b03831661080957604051634b637e8f60e11b8152600060048201526024016105d9565b6001600160a01b0382166108335760405163ec442f0560e01b8152600060048201526024016105d9565b61075c838383610bde565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561089757507f000000000000000000000000000000000000000000000000000000000000000046145b156108c157507f000000000000000000000000000000000000000000000000000000000000000090565b6104cb604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6005546001600160a01b031633146105145760405163118cdaa760e01b81523360048201526024016105d9565b6001600160a01b0382166109c05760405163ec442f0560e01b8152600060048201526024016105d9565b6104f160008383610bde565b6001600160a01b0382166109f657604051634b637e8f60e11b8152600060048201526024016105d9565b6104f182600083610bde565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006006610d08565b60606104cb7f00000000000000000000000000000000000000000000000000000000000000006007610d08565b60006103fa610abb61083e565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600080610aed88888888610db3565b925092509250610afd8282610e82565b50909695505050505050565b6001600160a01b038416610b335760405163e602df0560e01b8152600060048201526024016105d9565b6001600160a01b038316610b5d57604051634a1406b160e11b8152600060048201526024016105d9565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156107d957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bd091815260200190565b60405180910390a350505050565b6001600160a01b038316610c09578060026000828254610bfe9190611231565b90915550610c7b9050565b6001600160a01b03831660009081526020819052604090205481811015610c5c5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016105d9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610c9757600280548290039055610cb6565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cfb91815260200190565b60405180910390a3505050565b606060ff8314610d2257610d1b83610f3b565b90506103fa565b818054610d2e906111f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a906111f7565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505090506103fa565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610dee5750600091506003905082610e78565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e42573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e6e57506000925060019150829050610e78565b9250600091508190505b9450945094915050565b6000826003811115610e9657610e96611252565b03610e9f575050565b6001826003811115610eb357610eb3611252565b03610ed15760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610ee557610ee5611252565b03610f065760405163fce698f760e01b8152600481018290526024016105d9565b6003826003811115610f1a57610f1a611252565b036104f1576040516335e2f38360e21b8152600481018290526024016105d9565b60606000610f4883610f7a565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600060ff8216601f8111156103fa57604051632cd44ac360e21b815260040160405180910390fd5b6000815180845260005b81811015610fc857602081850181015186830182015201610fac565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610ffb6020830184610fa2565b9392505050565b80356001600160a01b038116811461101957600080fd5b919050565b6000806040838503121561103157600080fd5b61103a83611002565b946020939093013593505050565b60008060006060848603121561105d57600080fd5b61106684611002565b925061107460208501611002565b9150604084013590509250925092565b60006020828403121561109657600080fd5b5035919050565b6000602082840312156110af57600080fd5b610ffb82611002565b60ff60f81b881681526000602060e060208401526110d960e084018a610fa2565b83810360408501526110eb818a610fa2565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561113f57835183529284019291840191600101611123565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561116c57600080fd5b61117588611002565b965061118360208901611002565b95506040880135945060608801359350608088013560ff811681146111a757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156111d757600080fd5b6111e083611002565b91506111ee60208401611002565b90509250929050565b600181811c9082168061120b57607f821691505b60208210810361122b57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103fa57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea26469706673582212205a8199658d4eaad2b10696323e0bc0215d35ed43fe73c3637316e44e6d8ca31864736f6c6343000817003360806040523480156200001157600080fd5b5060405162001eb738038062001eb7833981016040819052620000349162000202565b858585600062000045838262000386565b50600162000054828262000386565b5050506001600160a01b0381166200008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200009181620000cb565b50600c620000a0848262000386565b50600d620000af838262000386565b50600e620000be828262000386565b5050505050505062000452565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013557600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016257600080fd5b81516001600160401b03808211156200017f576200017f6200013a565b604051601f8301601f19908116603f01168101908282118183101715620001aa57620001aa6200013a565b8160405283815260209250866020858801011115620001c857600080fd5b600091505b83821015620001ec5785820183015181830184015290820190620001cd565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200021c57600080fd5b62000227876200011d565b60208801519096506001600160401b03808211156200024557600080fd5b620002538a838b0162000150565b965060408901519150808211156200026a57600080fd5b620002788a838b0162000150565b955060608901519150808211156200028f57600080fd5b6200029d8a838b0162000150565b94506080890151915080821115620002b457600080fd5b620002c28a838b0162000150565b935060a0890151915080821115620002d957600080fd5b50620002e889828a0162000150565b9150509295509295509295565b600181811c908216806200030a57607f821691505b6020821081036200032b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000381576000816000526020600020601f850160051c810160208610156200035c5750805b601f850160051c820191505b818110156200037d5782815560010162000368565b5050505b505050565b81516001600160401b03811115620003a257620003a26200013a565b620003ba81620003b38454620002f5565b8462000331565b602080601f831160018114620003f25760008415620003d95750858301515b600019600386901b1c1916600185901b1785556200037d565b600085815260208120601f198616915b82811015620004235788860151825594840194600190910190840162000402565b5085821015620004425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611a5580620004626000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a76b4d56116100a2578063cd279c7c11610071578063cd279c7c146103a8578063e8a3d485146103bb578063e985e9c5146103c3578063f2fde38b146103d657600080fd5b8063a76b4d5614610372578063b49bbd941461037a578063b88d4fde14610382578063c87b56dd1461039557600080fd5b806394e29329116100de57806394e293291461034757806395d89b411461034f578063a159047b14610357578063a22cb4651461035f57600080fd5b806370a082311461031b578063715018a61461032e5780638da5cb5b1461033657600080fd5b80632f745c59116101715780634f558e791161014b5780634f558e79146102c25780634f6ccce7146102ed5780635e0a9661146103005780636352211e1461030857600080fd5b80632f745c591461028957806342842e0e1461029c57806342966c68146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c57806318160ddd1461025157806318e97fd11461026357806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611494565b6103e9565b60405190151581526020015b60405180910390f35b6102046103fa565b6040516101f39190611501565b61022461021f366004611514565b61048c565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611549565b6104b5565b005b6009545b6040519081526020016101f3565b61024f61027136600461161f565b6104c4565b61024f610284366004611666565b6104d6565b610255610297366004611549565b610566565b61024f6102aa366004611666565b6105cb565b61024f6102bd366004611514565b6105eb565b6101e76102d0366004611514565b6000908152600260205260409020546001600160a01b0316151590565b6102556102fb366004611514565b6105f7565b610204610650565b610224610316366004611514565b61065f565b6102556103293660046116a2565b61066a565b61024f6106b2565b600b546001600160a01b0316610224565b6102046106c6565b6102046106d5565b6102046106e4565b61024f61036d3660046116bd565b610772565b61020461077d565b61020461078a565b61024f6103903660046116f9565b610797565b6102046103a3366004611514565b6107ae565b61024f6103b6366004611775565b6107b9565b6102046107d5565b6101e76103d13660046117cc565b6107e4565b61024f6103e43660046116a2565b610812565b60006103f482610850565b92915050565b606060008054610409906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610435906117ff565b80156104825780601f1061045757610100808354040283529160200191610482565b820191906000526020600020905b81548152906001019060200180831161046557829003601f168201915b5050505050905090565b600061049782610875565b506000828152600460205260409020546001600160a01b03166103f4565b6104c08282336108ae565b5050565b6104cc6108bb565b6104c082826108e8565b6001600160a01b03821661050557604051633250574960e11b8152600060048201526024015b60405180910390fd5b6000610512838333610938565b9050836001600160a01b0316816001600160a01b031614610560576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016104fc565b50505050565b60006105718361066a565b82106105a25760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016104fc565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b6105e683838360405180602001604052806000815250610797565b505050565b6104c060008233610938565b600061060260095490565b821061062b5760405163295f44f760e21b815260006004820152602481018390526044016104fc565b6009828154811061063e5761063e611839565b90600052602060002001549050919050565b6060600d8054610409906117ff565b60006103f482610875565b60006001600160a01b038216610696576040516322718ad960e21b8152600060048201526024016104fc565b506001600160a01b031660009081526003602052604090205490565b6106ba6108bb565b6106c4600061094d565b565b6060600c8054610409906117ff565b606060018054610409906117ff565b600d80546106f1906117ff565b80601f016020809104026020016040519081016040528092919081815260200182805461071d906117ff565b801561076a5780601f1061073f5761010080835404028352916020019161076a565b820191906000526020600020905b81548152906001019060200180831161074d57829003601f168201915b505050505081565b6104c033838361099f565b600e80546106f1906117ff565b600c80546106f1906117ff565b6107a28484846104d6565b61056084848484610a3e565b60606103f482610b67565b6107c16108bb565b6107cb8383610c70565b6105e682826108e8565b6060600e8054610409906117ff565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61081a6108bb565b6001600160a01b03811661084457604051631e4fbdf760e01b8152600060048201526024016104fc565b61084d8161094d565b50565b60006001600160e01b0319821663780e9d6360e01b14806103f457506103f482610c8a565b6000818152600260205260408120546001600160a01b0316806103f457604051637e27328960e01b8152600481018490526024016104fc565b6105e68383836001610caf565b600b546001600160a01b031633146106c45760405163118cdaa760e01b81523360048201526024016104fc565b6000828152600660205260409020610900828261189f565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6000610945848484610db5565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166109d157604051630b61174360e31b81526001600160a01b03831660048201526024016104fc565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561056057604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610a8090339088908790879060040161195f565b6020604051808303816000875af1925050508015610abb575060408051601f3d908101601f19168201909252610ab89181019061199c565b60015b610b24573d808015610ae9576040519150601f19603f3d011682016040523d82523d6000602084013e610aee565b606091505b508051600003610b1c57604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610b6057604051633250574960e11b81526001600160a01b03851660048201526024016104fc565b5050505050565b6060610b7282610875565b5060008281526006602052604081208054610b8c906117ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb8906117ff565b8015610c055780601f10610bda57610100808354040283529160200191610c05565b820191906000526020600020905b815481529060010190602001808311610be857829003601f168201915b505050505090506000610c2360408051602081019091526000815290565b90508051600003610c35575092915050565b815115610c67578082604051602001610c4f9291906119b9565b60405160208183030381529060405292505050919050565b61094584610e82565b6104c0828260405180602001604052806000815250610ef7565b60006001600160e01b03198216632483248360e11b14806103f457506103f482610f0e565b8080610cc357506001600160a01b03821615155b15610d85576000610cd384610875565b90506001600160a01b03831615801590610cff5750826001600160a01b0316816001600160a01b031614155b8015610d125750610d1081846107e4565b155b15610d3b5760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016104fc565b8115610d835783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600080610dc3858585610f5e565b90506001600160a01b038116610e2057610e1b84600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b610e43565b846001600160a01b0316816001600160a01b031614610e4357610e438185611057565b6001600160a01b038516610e5f57610e5a846110e8565b610945565b846001600160a01b0316816001600160a01b031614610945576109458585611197565b6060610e8d82610875565b506000610ea560408051602081019091526000815290565b90506000815111610ec55760405180602001604052806000815250610ef0565b80610ecf846111e7565b604051602001610ee09291906119b9565b6040516020818303038152906040525b9392505050565b610f01838361127a565b6105e66000848484610a3e565b60006001600160e01b031982166380ac58cd60e01b1480610f3f57506001600160e01b03198216635b5e139f60e01b145b806103f457506301ffc9a760e01b6001600160e01b03198316146103f4565b6000828152600260205260408120546001600160a01b0390811690831615610f8b57610f8b8184866112df565b6001600160a01b03811615610fc957610fa8600085600080610caf565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610ff8576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b60006110628361066a565b6000838152600860205260409020549091508082146110b5576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b6009546000906110fa906001906119e8565b6000838152600a60205260408120546009805493945090928490811061112257611122611839565b90600052602060002001549050806009838154811061114357611143611839565b6000918252602080832090910192909255828152600a9091526040808220849055858252812055600980548061117b5761117b611a09565b6001900381819060005260206000200160009055905550505050565b600060016111a48461066a565b6111ae91906119e8565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b606060006111f483611343565b600101905060008167ffffffffffffffff81111561121457611214611573565b6040519080825280601f01601f19166020018201604052801561123e576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461124857509392505050565b6001600160a01b0382166112a457604051633250574960e11b8152600060048201526024016104fc565b60006112b283836000610938565b90506001600160a01b038116156105e6576040516339e3563760e11b8152600060048201526024016104fc565b6112ea83838361141b565b6105e6576001600160a01b03831661131857604051637e27328960e01b8152600481018290526024016104fc565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016104fc565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113825772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106113ae576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113cc57662386f26fc10000830492506010015b6305f5e10083106113e4576305f5e100830492506008015b61271083106113f857612710830492506004015b6064831061140a576064830492506002015b600a83106103f45760010192915050565b60006001600160a01b038316158015906109455750826001600160a01b0316846001600160a01b03161480611455575061145584846107e4565b806109455750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461084d57600080fd5b6000602082840312156114a657600080fd5b8135610ef08161147e565b60005b838110156114cc5781810151838201526020016114b4565b50506000910152565b600081518084526114ed8160208601602086016114b1565b601f01601f19169290920160200192915050565b602081526000610ef060208301846114d5565b60006020828403121561152657600080fd5b5035919050565b80356001600160a01b038116811461154457600080fd5b919050565b6000806040838503121561155c57600080fd5b6115658361152d565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156115a4576115a4611573565b604051601f8501601f19908116603f011681019082821181831017156115cc576115cc611573565b816040528093508581528686860111156115e557600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261161057600080fd5b610ef083833560208501611589565b6000806040838503121561163257600080fd5b82359150602083013567ffffffffffffffff81111561165057600080fd5b61165c858286016115ff565b9150509250929050565b60008060006060848603121561167b57600080fd5b6116848461152d565b92506116926020850161152d565b9150604084013590509250925092565b6000602082840312156116b457600080fd5b610ef08261152d565b600080604083850312156116d057600080fd5b6116d98361152d565b9150602083013580151581146116ee57600080fd5b809150509250929050565b6000806000806080858703121561170f57600080fd5b6117188561152d565b93506117266020860161152d565b925060408501359150606085013567ffffffffffffffff81111561174957600080fd5b8501601f8101871361175a57600080fd5b61176987823560208401611589565b91505092959194509250565b60008060006060848603121561178a57600080fd5b6117938461152d565b925060208401359150604084013567ffffffffffffffff8111156117b657600080fd5b6117c2868287016115ff565b9150509250925092565b600080604083850312156117df57600080fd5b6117e88361152d565b91506117f66020840161152d565b90509250929050565b600181811c9082168061181357607f821691505b60208210810361183357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b601f8211156105e6576000816000526020600020601f850160051c810160208610156118785750805b601f850160051c820191505b8181101561189757828155600101611884565b505050505050565b815167ffffffffffffffff8111156118b9576118b9611573565b6118cd816118c784546117ff565b8461184f565b602080601f83116001811461190257600084156118ea5750858301515b600019600386901b1c1916600185901b178555611897565b600085815260208120601f198616915b8281101561193157888601518255948401946001909101908401611912565b508582101561194f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611992908301846114d5565b9695505050505050565b6000602082840312156119ae57600080fd5b8151610ef08161147e565b600083516119cb8184602088016114b1565b8351908301906119df8183602088016114b1565b01949350505050565b818103818111156103f457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212206ebc33968f0bb2aac75fa88729c43c34a634938367a10e417cf26ce7e65b108764736f6c63430008170033a2646970667358221220a26f238ed62e7e34bbbb8acd7b64f9737843d19754822adfb4ce059e7e1743e064736f6c63430008170033" + "value": "f23c8619603434f7f71659820193c8e491feb1d9" } ] }, - "FlowEVMBridgeHandlerInterfaces", "FlowEVMBridgeHandlers", "FlowEVMBridgeNFTEscrow", "FlowEVMBridgeTokenEscrow", @@ -346,7 +347,16 @@ "IEVMBridgeTokenMinter", "IFlowEVMNFTBridge", "IFlowEVMTokenBridge", - "FlowEVMBridge" + "FlowEVMBridge", + { + "name": "FlowEVMBridgeAccessor", + "args": [ + { + "type": "Address", + "value": "0xb6763b4399a888c8" + } + ] + } ] } } From eccd01cf6ac3b5b856f79df4de162fcab2ef8ac0 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Fri, 10 May 2024 13:35:55 -0500 Subject: [PATCH 3/5] fix EVMUtils.getEVMAddressFromHexString --- cadence/contracts/utils/EVMUtils.cdc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cadence/contracts/utils/EVMUtils.cdc b/cadence/contracts/utils/EVMUtils.cdc index cc42ed71..314f2b42 100644 --- a/cadence/contracts/utils/EVMUtils.cdc +++ b/cadence/contracts/utils/EVMUtils.cdc @@ -36,7 +36,7 @@ access(all) contract EVMUtils { if address.length != 40 { return nil } - var addressBytes: [UInt8] = address.decodeHex() + var addressBytes: [UInt8] = address.toLower().decodeHex() if addressBytes.length != 20 { return nil } From b686be0221c336a4525aedaffab32c5a46266547 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Fri, 10 May 2024 13:36:46 -0500 Subject: [PATCH 4/5] add deployment in bridge test setup --- cadence/tests/flow_evm_bridge_tests.cdc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cadence/tests/flow_evm_bridge_tests.cdc b/cadence/tests/flow_evm_bridge_tests.cdc index de469faa..d7f01472 100644 --- a/cadence/tests/flow_evm_bridge_tests.cdc +++ b/cadence/tests/flow_evm_bridge_tests.cdc @@ -180,6 +180,13 @@ fun setup() { arguments: [factoryAddressHex] ) Test.expect(err, Test.beNil()) + + err = Test.deployContract( + name: "FlowEVMBridgeHandlers", + path: "../contracts/bridge/FlowEVMBridgeHandlers.cdc", + arguments: [] + ) + Test.expect(err, Test.beNil()) /* Integrate EVM bridge contract */ From e329591598c3980cd8068cfcd8caf712b883d6b8 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Fri, 10 May 2024 14:08:17 -0500 Subject: [PATCH 5/5] update README --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index a9956c95..98c12eb2 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ # Flow EVM Bridge -> :warning: Upcoming breaking changes may result in updated deployment addresses and redirection of bridge requests. - This repo contains contracts enabling bridging of fungible & non-fungible tokens between Cadence and EVM. ## Deployments