diff --git a/crates/astria-bridge-withdrawer/ethereum/local.env.example b/crates/astria-bridge-withdrawer/ethereum/local.env.example index 9ee3692b1c..58567457f0 100644 --- a/crates/astria-bridge-withdrawer/ethereum/local.env.example +++ b/crates/astria-bridge-withdrawer/ethereum/local.env.example @@ -4,17 +4,23 @@ PRIVATE_KEY=0x # default local rpc url RPC_URL="http://localhost:8545" -# divide withdrawn values by 10^ASSET_WITHDRAWAL_DECIMALS -ASSET_WITHDRAWAL_DECIMALS=12 +### contract deployment values + +# divide withdrawn values by 10^(18-BASE_CHAIN_ASSET_PRECISION) +BASE_CHAIN_ASSET_PRECISION=9 + +### contract call values # contract address ASTRIA_WITHDRAWER=0x5FbDB2315678afecb367f032d93F642f64180aa3 -# destination chain address to withdraw to on the sequencer +# if withdrawing to the sequencer, this must be set to +# the address to withdraw to on the sequencer SEQUENCER_DESTINATION_CHAIN_ADDRESS=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -# destination chain address to withdraw to on the origin chain -ORIGIN_DESTINATION_CHAIN_ADDRESS="astring" +# if withdrawing to another chain via IBC, this must be set to +# the destination chain address to withdraw to +ORIGIN_DESTINATION_CHAIN_ADDRESS="someaddress" -# amount to withdraw +# amount to withdraw, must be greater than 10^ASSET_WITHDRAWAL_DECIMALS AMOUNT=1000000000 diff --git a/crates/astria-bridge-withdrawer/ethereum/out/AstriaWithdrawer.sol/AstriaWithdrawer.json b/crates/astria-bridge-withdrawer/ethereum/out/AstriaWithdrawer.sol/AstriaWithdrawer.json index 301b7e31b7..4494218763 100644 --- a/crates/astria-bridge-withdrawer/ethereum/out/AstriaWithdrawer.sol/AstriaWithdrawer.json +++ b/crates/astria-bridge-withdrawer/ethereum/out/AstriaWithdrawer.sol/AstriaWithdrawer.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"assetWithdrawalDecimals","type":"uint32","internalType":"uint32"}],"stateMutability":"nonpayable"},{"type":"function","name":"ASSET_WITHDRAWAL_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"withdrawToOriginChain","inputs":[{"name":"destinationChainAddress","type":"string","internalType":"string"},{"name":"memo","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdrawToSequencer","inputs":[{"name":"destinationChainAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Ics20Withdrawal","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"destinationChainAddress","type":"string","indexed":false,"internalType":"string"},{"name":"memo","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SequencerWithdrawal","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"destinationChainAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60a060405234801561001057600080fd5b5060405161033938038061033983398101604081905261002f9161003d565b63ffffffff1660805261006a565b60006020828403121561004f57600080fd5b815163ffffffff8116811461006357600080fd5b9392505050565b6080516102b56100846000396000604b01526102b56000f3fe6080604052600436106100345760003560e01c80638f2d8cb81461003957806391bd1dde146100865780639a977afe1461009b575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200160405180910390f35b610099610094366004610188565b6100ae565b005b6100996100a93660046101f4565b6100fc565b34336001600160a01b03167f0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb868686866040516100ee949392919061024d565b60405180910390a350505050565b6040516001600160a01b0382168152349033907fae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e39060200160405180910390a350565b60008083601f84011261015157600080fd5b50813567ffffffffffffffff81111561016957600080fd5b60208301915083602082850101111561018157600080fd5b9250929050565b6000806000806040858703121561019e57600080fd5b843567ffffffffffffffff808211156101b657600080fd5b6101c28883890161013f565b909650945060208701359150808211156101db57600080fd5b506101e88782880161013f565b95989497509550505050565b60006020828403121561020657600080fd5b81356001600160a01b038116811461021d57600080fd5b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000610261604083018688610224565b8281036020840152610274818587610224565b97965050505050505056fea2646970667358221220fb54f76c7c378faa43bf665ecd082a3e01d796dc93f29eb5ca90bc5aa066546964736f6c63430008150033","sourceMap":"251:1847:20:-:0;;;700:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;754:51;;;;251:1847;;14:280:21;83:6;136:2;124:9;115:7;111:23;107:32;104:52;;;152:1;149;142:12;104:52;184:9;178:16;234:10;227:5;223:22;216:5;213:33;203:61;;260:1;257;250:12;203:61;283:5;14:280;-1:-1:-1;;;14:280:21:o;:::-;251:1847:20;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100345760003560e01c80638f2d8cb81461003957806391bd1dde146100865780639a977afe1461009b575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200160405180910390f35b610099610094366004610188565b6100ae565b005b6100996100a93660046101f4565b6100fc565b34336001600160a01b03167f0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb868686866040516100ee949392919061024d565b60405180910390a350505050565b6040516001600160a01b0382168152349033907fae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e39060200160405180910390a350565b60008083601f84011261015157600080fd5b50813567ffffffffffffffff81111561016957600080fd5b60208301915083602082850101111561018157600080fd5b9250929050565b6000806000806040858703121561019e57600080fd5b843567ffffffffffffffff808211156101b657600080fd5b6101c28883890161013f565b909650945060208701359150808211156101db57600080fd5b506101e88782880161013f565b95989497509550505050565b60006020828403121561020657600080fd5b81356001600160a01b038116811461021d57600080fd5b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000610261604083018688610224565b8281036020840152610274818587610224565b97965050505050505056fea2646970667358221220fb54f76c7c378faa43bf665ecd082a3e01d796dc93f29eb5ca90bc5aa066546964736f6c63430008150033","sourceMap":"251:1847:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:49;;;;;;;;;;;;;;;;;;188:10:21;176:23;;;158:42;;146:2;131:18;644:49:20;;;;;;;1894:202;;;;;;:::i;:::-;;:::i;:::-;;1720:168;;;;;;:::i;:::-;;:::i;1894:202::-;2048:9;2036:10;-1:-1:-1;;;;;2020:69:20;;2059:23;;2084:4;;2020:69;;;;;;;;;:::i;:::-;;;;;;;;1894:202;;;;:::o;1720:168::-;1814:67;;-1:-1:-1;;;;;2459:32:21;;2441:51;;1846:9:20;;1834:10;;1814:67;;2429:2:21;2414:18;1814:67:20;;;;;;;1720:168;:::o;211:348:21:-;263:8;273:6;327:3;320:4;312:6;308:17;304:27;294:55;;345:1;342;335:12;294:55;-1:-1:-1;368:20:21;;411:18;400:30;;397:50;;;443:1;440;433:12;397:50;480:4;472:6;468:17;456:29;;532:3;525:4;516:6;508;504:19;500:30;497:39;494:59;;;549:1;546;539:12;494:59;211:348;;;;;:::o;564:721::-;656:6;664;672;680;733:2;721:9;712:7;708:23;704:32;701:52;;;749:1;746;739:12;701:52;789:9;776:23;818:18;859:2;851:6;848:14;845:34;;;875:1;872;865:12;845:34;914:59;965:7;956:6;945:9;941:22;914:59;:::i;:::-;992:8;;-1:-1:-1;888:85:21;-1:-1:-1;1080:2:21;1065:18;;1052:32;;-1:-1:-1;1096:16:21;;;1093:36;;;1125:1;1122;1115:12;1093:36;;1164:61;1217:7;1206:8;1195:9;1191:24;1164:61;:::i;:::-;564:721;;;;-1:-1:-1;1244:8:21;-1:-1:-1;;;;564:721:21:o;1290:286::-;1349:6;1402:2;1390:9;1381:7;1377:23;1373:32;1370:52;;;1418:1;1415;1408:12;1370:52;1444:23;;-1:-1:-1;;;;;1496:31:21;;1486:42;;1476:70;;1542:1;1539;1532:12;1476:70;1565:5;1290:286;-1:-1:-1;;;1290:286:21:o;1581:267::-;1670:6;1665:3;1658:19;1722:6;1715:5;1708:4;1703:3;1699:14;1686:43;-1:-1:-1;1774:1:21;1749:16;;;1767:4;1745:27;;;1738:38;;;;1830:2;1809:15;;;-1:-1:-1;;1805:29:21;1796:39;;;1792:50;;1581:267::o;1853:437::-;2070:2;2059:9;2052:21;2033:4;2096:62;2154:2;2143:9;2139:18;2131:6;2123;2096:62;:::i;:::-;2206:9;2198:6;2194:22;2189:2;2178:9;2174:18;2167:50;2234;2277:6;2269;2261;2234:50;:::i;:::-;2226:58;1853:437;-1:-1:-1;;;;;;;1853:437:21:o","linkReferences":{},"immutableReferences":{"43388":[{"start":75,"length":32}]}},"methodIdentifiers":{"ASSET_WITHDRAWAL_DECIMALS()":"8f2d8cb8","withdrawToOriginChain(string,string)":"91bd1dde","withdrawToSequencer(address)":"9a977afe"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"assetWithdrawalDecimals\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destinationChainAddress\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"name\":\"Ics20Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationChainAddress\",\"type\":\"address\"}],\"name\":\"SequencerWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ASSET_WITHDRAWAL_DECIMALS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"destinationChainAddress\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"name\":\"withdrawToOriginChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destinationChainAddress\",\"type\":\"address\"}],\"name\":\"withdrawToSequencer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AstriaWithdrawer.sol\":\"AstriaWithdrawer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":forge-std/=lib/forge-std/src/\"]},\"sources\":{\"src/AstriaWithdrawer.sol\":{\"keccak256\":\"0xf96e20ce4dde2397d4a7887b1f9f7b9883517e9bbef80527cc8795f4342c15dd\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://e74ce43ac8eeadac876215cdd201ff55b7f1ee3575593472ae1c0594f3453abe\",\"dweb:/ipfs/Qmdj7SkdKVMoRhqTCJawjfWKgG5pyb55wZd933V18qJTnu\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint32","name":"assetWithdrawalDecimals","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":true},{"internalType":"string","name":"destinationChainAddress","type":"string","indexed":false},{"internalType":"string","name":"memo","type":"string","indexed":false}],"type":"event","name":"Ics20Withdrawal","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":true},{"internalType":"address","name":"destinationChainAddress","type":"address","indexed":false}],"type":"event","name":"SequencerWithdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"ASSET_WITHDRAWAL_DECIMALS","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"string","name":"destinationChainAddress","type":"string"},{"internalType":"string","name":"memo","type":"string"}],"stateMutability":"payable","type":"function","name":"withdrawToOriginChain"},{"inputs":[{"internalType":"address","name":"destinationChainAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"withdrawToSequencer"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["forge-std/=lib/forge-std/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AstriaWithdrawer.sol":"AstriaWithdrawer"},"evmVersion":"paris","libraries":{}},"sources":{"src/AstriaWithdrawer.sol":{"keccak256":"0xf96e20ce4dde2397d4a7887b1f9f7b9883517e9bbef80527cc8795f4342c15dd","urls":["bzz-raw://e74ce43ac8eeadac876215cdd201ff55b7f1ee3575593472ae1c0594f3453abe","dweb:/ipfs/Qmdj7SkdKVMoRhqTCJawjfWKgG5pyb55wZd933V18qJTnu"],"license":"MIT or Apache-2.0"}},"version":1},"ast":{"absolutePath":"src/AstriaWithdrawer.sol","id":43449,"exportedSymbols":{"AstriaWithdrawer":[43448]},"nodeType":"SourceUnit","src":"46:2053:20","nodes":[{"id":43386,"nodeType":"PragmaDirective","src":"46:24:20","nodes":[],"literals":["solidity","^","0.8",".21"]},{"id":43448,"nodeType":"ContractDefinition","src":"251:1847:20","nodes":[{"id":43388,"nodeType":"VariableDeclaration","src":"644:49:20","nodes":[],"constant":false,"functionSelector":"8f2d8cb8","mutability":"immutable","name":"ASSET_WITHDRAWAL_DECIMALS","nameLocation":"668:25:20","scope":43448,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":43387,"name":"uint32","nodeType":"ElementaryTypeName","src":"644:6:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"id":43398,"nodeType":"FunctionDefinition","src":"700:112:20","nodes":[],"body":{"id":43397,"nodeType":"Block","src":"744:68:20","nodes":[],"statements":[{"expression":{"id":43395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43393,"name":"ASSET_WITHDRAWAL_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43388,"src":"754:25:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":43394,"name":"assetWithdrawalDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43390,"src":"782:23:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"754:51:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":43396,"nodeType":"ExpressionStatement","src":"754:51:20"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":43391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43390,"mutability":"mutable","name":"assetWithdrawalDecimals","nameLocation":"719:23:20","nodeType":"VariableDeclaration","scope":43398,"src":"712:30:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":43389,"name":"uint32","nodeType":"ElementaryTypeName","src":"712:6:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"711:32:20"},"returnParameters":{"id":43392,"nodeType":"ParameterList","parameters":[],"src":"744:0:20"},"scope":43448,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":43406,"nodeType":"EventDefinition","src":"1052:107:20","nodes":[],"anonymous":false,"eventSelector":"ae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e3","name":"SequencerWithdrawal","nameLocation":"1058:19:20","parameters":{"id":43405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43400,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1094:6:20","nodeType":"VariableDeclaration","scope":43406,"src":"1078:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43399,"name":"address","nodeType":"ElementaryTypeName","src":"1078:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43402,"indexed":true,"mutability":"mutable","name":"amount","nameLocation":"1118:6:20","nodeType":"VariableDeclaration","scope":43406,"src":"1102:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43401,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43404,"indexed":false,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1134:23:20","nodeType":"VariableDeclaration","scope":43406,"src":"1126:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43403,"name":"address","nodeType":"ElementaryTypeName","src":"1126:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1077:81:20"}},{"id":43416,"nodeType":"EventDefinition","src":"1595:115:20","nodes":[],"anonymous":false,"eventSelector":"0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb","name":"Ics20Withdrawal","nameLocation":"1601:15:20","parameters":{"id":43415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43408,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1633:6:20","nodeType":"VariableDeclaration","scope":43416,"src":"1617:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43407,"name":"address","nodeType":"ElementaryTypeName","src":"1617:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43410,"indexed":true,"mutability":"mutable","name":"amount","nameLocation":"1657:6:20","nodeType":"VariableDeclaration","scope":43416,"src":"1641:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1641:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43412,"indexed":false,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1672:23:20","nodeType":"VariableDeclaration","scope":43416,"src":"1665:30:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":43411,"name":"string","nodeType":"ElementaryTypeName","src":"1665:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":43414,"indexed":false,"mutability":"mutable","name":"memo","nameLocation":"1704:4:20","nodeType":"VariableDeclaration","scope":43416,"src":"1697:11:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":43413,"name":"string","nodeType":"ElementaryTypeName","src":"1697:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1616:93:20"}},{"id":43430,"nodeType":"FunctionDefinition","src":"1720:168:20","nodes":[],"body":{"id":43429,"nodeType":"Block","src":"1799:89:20","nodes":[],"statements":[{"eventCall":{"arguments":[{"expression":{"id":43422,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1834:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1838:6:20","memberName":"sender","nodeType":"MemberAccess","src":"1834:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":43424,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1846:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:5:20","memberName":"value","nodeType":"MemberAccess","src":"1846:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":43426,"name":"destinationChainAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43418,"src":"1857:23:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":43421,"name":"SequencerWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43406,"src":"1814:19:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address)"}},"id":43427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1814:67:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43428,"nodeType":"EmitStatement","src":"1809:72:20"}]},"functionSelector":"9a977afe","implemented":true,"kind":"function","modifiers":[],"name":"withdrawToSequencer","nameLocation":"1729:19:20","parameters":{"id":43419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43418,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1757:23:20","nodeType":"VariableDeclaration","scope":43430,"src":"1749:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43417,"name":"address","nodeType":"ElementaryTypeName","src":"1749:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1748:33:20"},"returnParameters":{"id":43420,"nodeType":"ParameterList","parameters":[],"src":"1799:0:20"},"scope":43448,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":43447,"nodeType":"FunctionDefinition","src":"1894:202:20","nodes":[],"body":{"id":43446,"nodeType":"Block","src":"2005:91:20","nodes":[],"statements":[{"eventCall":{"arguments":[{"expression":{"id":43438,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2036:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2040:6:20","memberName":"sender","nodeType":"MemberAccess","src":"2036:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":43440,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2048:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2052:5:20","memberName":"value","nodeType":"MemberAccess","src":"2048:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":43442,"name":"destinationChainAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43432,"src":"2059:23:20","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":43443,"name":"memo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43434,"src":"2084:4:20","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":43437,"name":"Ics20Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43416,"src":"2020:15:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,string memory,string memory)"}},"id":43444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2020:69:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43445,"nodeType":"EmitStatement","src":"2015:74:20"}]},"functionSelector":"91bd1dde","implemented":true,"kind":"function","modifiers":[],"name":"withdrawToOriginChain","nameLocation":"1903:21:20","parameters":{"id":43435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43432,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1941:23:20","nodeType":"VariableDeclaration","scope":43447,"src":"1925:39:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":43431,"name":"string","nodeType":"ElementaryTypeName","src":"1925:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":43434,"mutability":"mutable","name":"memo","nameLocation":"1982:4:20","nodeType":"VariableDeclaration","scope":43447,"src":"1966:20:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":43433,"name":"string","nodeType":"ElementaryTypeName","src":"1966:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1924:63:20"},"returnParameters":{"id":43436,"nodeType":"ParameterList","parameters":[],"src":"2005:0:20"},"scope":43448,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"AstriaWithdrawer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[43448],"name":"AstriaWithdrawer","nameLocation":"260:16:20","scope":43449,"usedErrors":[],"usedEvents":[43406,43416]}],"license":"MIT or Apache-2.0"},"id":20} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"_baseChainAssetPrecision","type":"uint32","internalType":"uint32"}],"stateMutability":"nonpayable"},{"type":"function","name":"BASE_CHAIN_ASSET_PRECISION","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"withdrawToIbcChain","inputs":[{"name":"destinationChainAddress","type":"string","internalType":"string"},{"name":"memo","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"withdrawToSequencer","inputs":[{"name":"destinationChainAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"Ics20Withdrawal","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"destinationChainAddress","type":"string","indexed":false,"internalType":"string"},{"name":"memo","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"SequencerWithdrawal","inputs":[{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"destinationChainAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false}],"bytecode":{"object":"0x60c060405234801561001057600080fd5b5060405161067c38038061067c83398101604081905261002f916100ef565b60128163ffffffff1611156100c65760405162461bcd60e51b815260206004820152604d60248201527f417374726961576974686472617765723a206261736520636861696e2061737360448201527f657420707265636973696f6e206d757374206265206c657373207468616e206f60648201526c0e440cae2eac2d840e8de40627609b1b608482015260a40160405180910390fd5b63ffffffff81166080526100db816012610132565b6100e690600a61023c565b60a0525061024e565b60006020828403121561010157600080fd5b815163ffffffff8116811461011557600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff82811682821603908082111561014f5761014f61011c565b5092915050565b600181815b808511156101915781600019048211156101775761017761011c565b8085161561018457918102915b93841c939080029061015b565b509250929050565b6000826101a857506001610236565b816101b557506000610236565b81600181146101cb57600281146101d5576101f1565b6001915050610236565b60ff8411156101e6576101e661011c565b50506001821b610236565b5060208310610133831016604e8410600b8410161715610214575081810a610236565b61021e8383610156565b80600019048211156102325761023261011c565b0290505b92915050565b600061011563ffffffff841683610199565b60805160a0516104046102786000396000818160b6015261014d01526000604b01526104046000f3fe6080604052600436106100345760003560e01c80637eb6dec7146100395780639a977afe14610086578063a996e0201461009b575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200160405180910390f35b6100996100943660046101de565b6100ae565b005b6100996100a9366004610257565b610145565b3460006100db7f0000000000000000000000000000000000000000000000000000000000000000836102c3565b116101015760405162461bcd60e51b81526004016100f8906102e5565b60405180910390fd5b6040516001600160a01b0383168152349033907fae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e39060200160405180910390a35050565b3460006101727f0000000000000000000000000000000000000000000000000000000000000000836102c3565b1161018f5760405162461bcd60e51b81526004016100f8906102e5565b34336001600160a01b03167f0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb878787876040516101cf949392919061039c565b60405180910390a35050505050565b6000602082840312156101f057600080fd5b81356001600160a01b038116811461020757600080fd5b9392505050565b60008083601f84011261022057600080fd5b50813567ffffffffffffffff81111561023857600080fd5b60208301915083602082850101111561025057600080fd5b9250929050565b6000806000806040858703121561026d57600080fd5b843567ffffffffffffffff8082111561028557600080fd5b6102918883890161020e565b909650945060208701359150808211156102aa57600080fd5b506102b78782880161020e565b95989497509550505050565b6000826102e057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526062908201527f417374726961576974686472617765723a20696e73756666696369656e74207660408201527f616c75652c206d7573742062652067726561746572207468616e203130202a2a60608201527f20283138202d20424153455f434841494e5f41535345545f505245434953494f6080820152614e2960f01b60a082015260c00190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006103b0604083018688610373565b82810360208401526103c3818587610373565b97965050505050505056fea26469706673582212202727e6981832894eaacaf80cf4c043b07a5d415ff03277227618468e6acec74464736f6c63430008150033","sourceMap":"251:2422:20:-:0;;;802:328;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;888:2;861:24;:29;;;857:147;;;906:87;;-1:-1:-1;;;906:87:20;;501:2:21;906:87:20;;;483:21:21;540:2;520:18;;;513:30;579:34;559:18;;;552:62;650:34;630:18;;;623:62;-1:-1:-1;;;701:19:21;;;694:44;755:19;;906:87:20;;;;;;;857:147;1013:53;;;;;1093:29;1042:24;1093:2;:29;:::i;:::-;1086:37;;:2;:37;:::i;:::-;1076:47;;-1:-1:-1;251:2422:20;;14:280:21;83:6;136:2;124:9;115:7;111:23;107:32;104:52;;;152:1;149;142:12;104:52;184:9;178:16;234:10;227:5;223:22;216:5;213:33;203:61;;260:1;257;250:12;203:61;283:5;14:280;-1:-1:-1;;;14:280:21:o;785:127::-;846:10;841:3;837:20;834:1;827:31;877:4;874:1;867:15;901:4;898:1;891:15;917:175;985:10;1028;;;1016;;;1012:27;;1051:12;;;1048:38;;;1066:18;;:::i;:::-;1048:38;917:175;;;;:::o;1097:422::-;1186:1;1229:5;1186:1;1243:270;1264:7;1254:8;1251:21;1243:270;;;1323:4;1319:1;1315:6;1311:17;1305:4;1302:27;1299:53;;;1332:18;;:::i;:::-;1382:7;1372:8;1368:22;1365:55;;;1402:16;;;;1365:55;1481:22;;;;1441:15;;;;1243:270;;;1247:3;1097:422;;;;;:::o;1524:806::-;1573:5;1603:8;1593:80;;-1:-1:-1;1644:1:21;1658:5;;1593:80;1692:4;1682:76;;-1:-1:-1;1729:1:21;1743:5;;1682:76;1774:4;1792:1;1787:59;;;;1860:1;1855:130;;;;1767:218;;1787:59;1817:1;1808:10;;1831:5;;;1855:130;1892:3;1882:8;1879:17;1876:43;;;1899:18;;:::i;:::-;-1:-1:-1;;1955:1:21;1941:16;;1970:5;;1767:218;;2069:2;2059:8;2056:16;2050:3;2044:4;2041:13;2037:36;2031:2;2021:8;2018:16;2013:2;2007:4;2004:12;2000:35;1997:77;1994:159;;;-1:-1:-1;2106:19:21;;;2138:5;;1994:159;2185:34;2210:8;2204:4;2185:34;:::i;:::-;2255:6;2251:1;2247:6;2243:19;2234:7;2231:32;2228:58;;;2266:18;;:::i;:::-;2304:20;;-1:-1:-1;1524:806:21;;;;;:::o;2335:147::-;2394:5;2423:53;2464:10;2454:8;2450:25;2444:4;2423:53;:::i;2335:147::-;251:2422:20;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106100345760003560e01c80637eb6dec7146100395780639a977afe14610086578063a996e0201461009b575b600080fd5b34801561004557600080fd5b5061006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200160405180910390f35b6100996100943660046101de565b6100ae565b005b6100996100a9366004610257565b610145565b3460006100db7f0000000000000000000000000000000000000000000000000000000000000000836102c3565b116101015760405162461bcd60e51b81526004016100f8906102e5565b60405180910390fd5b6040516001600160a01b0383168152349033907fae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e39060200160405180910390a35050565b3460006101727f0000000000000000000000000000000000000000000000000000000000000000836102c3565b1161018f5760405162461bcd60e51b81526004016100f8906102e5565b34336001600160a01b03167f0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb878787876040516101cf949392919061039c565b60405180910390a35050505050565b6000602082840312156101f057600080fd5b81356001600160a01b038116811461020757600080fd5b9392505050565b60008083601f84011261022057600080fd5b50813567ffffffffffffffff81111561023857600080fd5b60208301915083602082850101111561025057600080fd5b9250929050565b6000806000806040858703121561026d57600080fd5b843567ffffffffffffffff8082111561028557600080fd5b6102918883890161020e565b909650945060208701359150808211156102aa57600080fd5b506102b78782880161020e565b95989497509550505050565b6000826102e057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526062908201527f417374726961576974686472617765723a20696e73756666696369656e74207660408201527f616c75652c206d7573742062652067726561746572207468616e203130202a2a60608201527f20283138202d20424153455f434841494e5f41535345545f505245434953494f6080820152614e2960f01b60a082015260c00190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6040815260006103b0604083018688610373565b82810360208401526103c3818587610373565b97965050505050505056fea26469706673582212202727e6981832894eaacaf80cf4c043b07a5d415ff03277227618468e6acec74464736f6c63430008150033","sourceMap":"251:2422:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;544:50;;;;;;;;;;;;;;;;;;188:10:21;176:23;;;158:42;;146:2;131:18;544:50:20;;;;;;;2244:195;;;;;;:::i;:::-;;:::i;:::-;;2445:226;;;;;;:::i;:::-;;:::i;2244:195::-;2339:9;2112:1;2093:16;2102:7;2339:9;2093:16;:::i;:::-;:20;2085:131;;;;-1:-1:-1;;;2085:131:20;;;;;;;:::i;:::-;;;;;;;;;2365:67:::1;::::0;-1:-1:-1;;;;;2514:32:21;;2496:51;;2397:9:20::1;::::0;2385:10:::1;::::0;2365:67:::1;::::0;2484:2:21;2469:18;2365:67:20::1;;;;;;;2244:195:::0;;:::o;2445:226::-;2569:9;2112:1;2093:16;2102:7;2569:9;2093:16;:::i;:::-;:20;2085:131;;;;-1:-1:-1;;;2085:131:20;;;;;;;:::i;:::-;2623:9:::1;2611:10;-1:-1:-1::0;;;;;2595:69:20::1;;2634:23;;2659:4;;2595:69;;;;;;;;;:::i;:::-;;;;;;;;2445:226:::0;;;;;:::o;211:286:21:-;270:6;323:2;311:9;302:7;298:23;294:32;291:52;;;339:1;336;329:12;291:52;365:23;;-1:-1:-1;;;;;417:31:21;;407:42;;397:70;;463:1;460;453:12;397:70;486:5;211:286;-1:-1:-1;;;211:286:21:o;502:348::-;554:8;564:6;618:3;611:4;603:6;599:17;595:27;585:55;;636:1;633;626:12;585:55;-1:-1:-1;659:20:21;;702:18;691:30;;688:50;;;734:1;731;724:12;688:50;771:4;763:6;759:17;747:29;;823:3;816:4;807:6;799;795:19;791:30;788:39;785:59;;;840:1;837;830:12;785:59;502:348;;;;;:::o;855:721::-;947:6;955;963;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1080:9;1067:23;1109:18;1150:2;1142:6;1139:14;1136:34;;;1166:1;1163;1156:12;1136:34;1205:59;1256:7;1247:6;1236:9;1232:22;1205:59;:::i;:::-;1283:8;;-1:-1:-1;1179:85:21;-1:-1:-1;1371:2:21;1356:18;;1343:32;;-1:-1:-1;1387:16:21;;;1384:36;;;1416:1;1413;1406:12;1384:36;;1455:61;1508:7;1497:8;1486:9;1482:24;1455:61;:::i;:::-;855:721;;;;-1:-1:-1;1535:8:21;-1:-1:-1;;;;855:721:21:o;1581:217::-;1621:1;1647;1637:132;;1691:10;1686:3;1682:20;1679:1;1672:31;1726:4;1723:1;1716:15;1754:4;1751:1;1744:15;1637:132;-1:-1:-1;1783:9:21;;1581:217::o;1803:542::-;2005:2;1987:21;;;2044:2;2024:18;;;2017:30;2083:34;2078:2;2063:18;;2056:62;2154:34;2149:2;2134:18;;2127:62;2226:34;2220:3;2205:19;;2198:63;-1:-1:-1;;;2292:3:21;2277:19;;2270:33;2335:3;2320:19;;1803:542::o;2558:267::-;2647:6;2642:3;2635:19;2699:6;2692:5;2685:4;2680:3;2676:14;2663:43;-1:-1:-1;2751:1:21;2726:16;;;2744:4;2722:27;;;2715:38;;;;2807:2;2786:15;;;-1:-1:-1;;2782:29:21;2773:39;;;2769:50;;2558:267::o;2830:437::-;3047:2;3036:9;3029:21;3010:4;3073:62;3131:2;3120:9;3116:18;3108:6;3100;3073:62;:::i;:::-;3183:9;3175:6;3171:22;3166:2;3155:9;3151:18;3144:50;3211;3254:6;3246;3238;3211:50;:::i;:::-;3203:58;2830:437;-1:-1:-1;;;;;;;2830:437:21:o","linkReferences":{},"immutableReferences":{"43376":[{"start":75,"length":32}],"43378":[{"start":182,"length":32},{"start":333,"length":32}]}},"methodIdentifiers":{"BASE_CHAIN_ASSET_PRECISION()":"7eb6dec7","withdrawToIbcChain(string,string)":"a996e020","withdrawToSequencer(address)":"9a977afe"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_baseChainAssetPrecision\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"destinationChainAddress\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"name\":\"Ics20Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationChainAddress\",\"type\":\"address\"}],\"name\":\"SequencerWithdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_CHAIN_ASSET_PRECISION\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"destinationChainAddress\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"memo\",\"type\":\"string\"}],\"name\":\"withdrawToIbcChain\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"destinationChainAddress\",\"type\":\"address\"}],\"name\":\"withdrawToSequencer\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/AstriaWithdrawer.sol\":\"AstriaWithdrawer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"src/AstriaWithdrawer.sol\":{\"keccak256\":\"0x2383831e93b3b102a4440e7e0d8266f9e2283d8d8b1cb74673c2b0519e5a9c98\",\"license\":\"MIT or Apache-2.0\",\"urls\":[\"bzz-raw://0f207c4f9d7b378f2064be9c1b4770e32458b0c0ab409f1356314468f010ff48\",\"dweb:/ipfs/Qma2pxduWnK2t1JwYh6tS5yCdt3hTiGUmvouWPqmhNdWh2\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint32","name":"_baseChainAssetPrecision","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":true},{"internalType":"string","name":"destinationChainAddress","type":"string","indexed":false},{"internalType":"string","name":"memo","type":"string","indexed":false}],"type":"event","name":"Ics20Withdrawal","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":true},{"internalType":"address","name":"destinationChainAddress","type":"address","indexed":false}],"type":"event","name":"SequencerWithdrawal","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"BASE_CHAIN_ASSET_PRECISION","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"string","name":"destinationChainAddress","type":"string"},{"internalType":"string","name":"memo","type":"string"}],"stateMutability":"payable","type":"function","name":"withdrawToIbcChain"},{"inputs":[{"internalType":"address","name":"destinationChainAddress","type":"address"}],"stateMutability":"payable","type":"function","name":"withdrawToSequencer"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/AstriaWithdrawer.sol":"AstriaWithdrawer"},"evmVersion":"paris","libraries":{}},"sources":{"src/AstriaWithdrawer.sol":{"keccak256":"0x2383831e93b3b102a4440e7e0d8266f9e2283d8d8b1cb74673c2b0519e5a9c98","urls":["bzz-raw://0f207c4f9d7b378f2064be9c1b4770e32458b0c0ab409f1356314468f010ff48","dweb:/ipfs/Qma2pxduWnK2t1JwYh6tS5yCdt3hTiGUmvouWPqmhNdWh2"],"license":"MIT or Apache-2.0"}},"version":1},"ast":{"absolutePath":"src/AstriaWithdrawer.sol","id":43480,"exportedSymbols":{"AstriaWithdrawer":[43479]},"nodeType":"SourceUnit","src":"46:2628:20","nodes":[{"id":43374,"nodeType":"PragmaDirective","src":"46:24:20","nodes":[],"literals":["solidity","^","0.8",".21"]},{"id":43479,"nodeType":"ContractDefinition","src":"251:2422:20","nodes":[{"id":43376,"nodeType":"VariableDeclaration","src":"544:50:20","nodes":[],"constant":false,"functionSelector":"7eb6dec7","mutability":"immutable","name":"BASE_CHAIN_ASSET_PRECISION","nameLocation":"568:26:20","scope":43479,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":43375,"name":"uint32","nodeType":"ElementaryTypeName","src":"544:6:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"public"},{"id":43378,"nodeType":"VariableDeclaration","src":"762:33:20","nodes":[],"constant":false,"mutability":"immutable","name":"DIVISOR","nameLocation":"788:7:20","scope":43479,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43377,"name":"uint256","nodeType":"ElementaryTypeName","src":"762:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":43406,"nodeType":"FunctionDefinition","src":"802:328:20","nodes":[],"body":{"id":43405,"nodeType":"Block","src":"847:283:20","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":43385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43383,"name":"_baseChainAssetPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43380,"src":"861:24:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3138","id":43384,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"888:2:20","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"src":"861:29:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43391,"nodeType":"IfStatement","src":"857:147:20","trueBody":{"id":43390,"nodeType":"Block","src":"892:112:20","statements":[{"expression":{"arguments":[{"hexValue":"417374726961576974686472617765723a206261736520636861696e20617373657420707265636973696f6e206d757374206265206c657373207468616e206f7220657175616c20746f203138","id":43387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"913:79:20","typeDescriptions":{"typeIdentifier":"t_stringliteral_083adf3a7ddc8bddd208fc804ff77804938532d0290b2338dff5c575303e498b","typeString":"literal_string \"AstriaWithdrawer: base chain asset precision must be less than or equal to 18\""},"value":"AstriaWithdrawer: base chain asset precision must be less than or equal to 18"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_083adf3a7ddc8bddd208fc804ff77804938532d0290b2338dff5c575303e498b","typeString":"literal_string \"AstriaWithdrawer: base chain asset precision must be less than or equal to 18\""}],"id":43386,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"906:6:20","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":43388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"906:87:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43389,"nodeType":"ExpressionStatement","src":"906:87:20"}]}},{"expression":{"id":43394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43392,"name":"BASE_CHAIN_ASSET_PRECISION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43376,"src":"1013:26:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":43393,"name":"_baseChainAssetPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43380,"src":"1042:24:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1013:53:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":43395,"nodeType":"ExpressionStatement","src":"1013:53:20"},{"expression":{"id":43403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43396,"name":"DIVISOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43378,"src":"1076:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1086:2:20","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":43400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3138","id":43398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1093:2:20","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":43399,"name":"_baseChainAssetPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43380,"src":"1098:24:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1093:29:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":43401,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1092:31:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1086:37:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1076:47:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43404,"nodeType":"ExpressionStatement","src":"1076:47:20"}]},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":43381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43380,"mutability":"mutable","name":"_baseChainAssetPrecision","nameLocation":"821:24:20","nodeType":"VariableDeclaration","scope":43406,"src":"814:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":43379,"name":"uint32","nodeType":"ElementaryTypeName","src":"814:6:20","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"813:33:20"},"returnParameters":{"id":43382,"nodeType":"ParameterList","parameters":[],"src":"847:0:20"},"scope":43479,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":43414,"nodeType":"EventDefinition","src":"1370:107:20","nodes":[],"anonymous":false,"eventSelector":"ae8e66664d108544509c9a5b6a9f33c3b5fef3f88e5d3fa680706a6feb1360e3","name":"SequencerWithdrawal","nameLocation":"1376:19:20","parameters":{"id":43413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43408,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1412:6:20","nodeType":"VariableDeclaration","scope":43414,"src":"1396:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43407,"name":"address","nodeType":"ElementaryTypeName","src":"1396:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43410,"indexed":true,"mutability":"mutable","name":"amount","nameLocation":"1436:6:20","nodeType":"VariableDeclaration","scope":43414,"src":"1420:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43409,"name":"uint256","nodeType":"ElementaryTypeName","src":"1420:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43412,"indexed":false,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1452:23:20","nodeType":"VariableDeclaration","scope":43414,"src":"1444:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43411,"name":"address","nodeType":"ElementaryTypeName","src":"1444:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1395:81:20"}},{"id":43424,"nodeType":"EventDefinition","src":"1913:115:20","nodes":[],"anonymous":false,"eventSelector":"0c64e29a5254a71c7f4e52b3d2d236348c80e00a00ba2e1961962bd2827c03fb","name":"Ics20Withdrawal","nameLocation":"1919:15:20","parameters":{"id":43423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43416,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1951:6:20","nodeType":"VariableDeclaration","scope":43424,"src":"1935:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43415,"name":"address","nodeType":"ElementaryTypeName","src":"1935:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":43418,"indexed":true,"mutability":"mutable","name":"amount","nameLocation":"1975:6:20","nodeType":"VariableDeclaration","scope":43424,"src":"1959:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43417,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43420,"indexed":false,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"1990:23:20","nodeType":"VariableDeclaration","scope":43424,"src":"1983:30:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":43419,"name":"string","nodeType":"ElementaryTypeName","src":"1983:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":43422,"indexed":false,"mutability":"mutable","name":"memo","nameLocation":"2022:4:20","nodeType":"VariableDeclaration","scope":43424,"src":"2015:11:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":43421,"name":"string","nodeType":"ElementaryTypeName","src":"2015:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1934:93:20"}},{"id":43439,"nodeType":"ModifierDefinition","src":"2034:200:20","nodes":[],"body":{"id":43438,"nodeType":"Block","src":"2075:159:20","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43429,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43426,"src":"2093:6:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":43430,"name":"DIVISOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43378,"src":"2102:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2093:16:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43432,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2112:1:20","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2093:20:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"417374726961576974686472617765723a20696e73756666696369656e742076616c75652c206d7573742062652067726561746572207468616e203130202a2a20283138202d20424153455f434841494e5f41535345545f505245434953494f4e29","id":43434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2115:100:20","typeDescriptions":{"typeIdentifier":"t_stringliteral_87395c1887b61acba4d118e59e0436e32cecdc5b14d96254028b3b49acc85aa8","typeString":"literal_string \"AstriaWithdrawer: insufficient value, must be greater than 10 ** (18 - BASE_CHAIN_ASSET_PRECISION)\""},"value":"AstriaWithdrawer: insufficient value, must be greater than 10 ** (18 - BASE_CHAIN_ASSET_PRECISION)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_87395c1887b61acba4d118e59e0436e32cecdc5b14d96254028b3b49acc85aa8","typeString":"literal_string \"AstriaWithdrawer: insufficient value, must be greater than 10 ** (18 - BASE_CHAIN_ASSET_PRECISION)\""}],"id":43428,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2085:7:20","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":43435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2085:131:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43436,"nodeType":"ExpressionStatement","src":"2085:131:20"},{"id":43437,"nodeType":"PlaceholderStatement","src":"2226:1:20"}]},"name":"sufficientValue","nameLocation":"2043:15:20","parameters":{"id":43427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43426,"mutability":"mutable","name":"amount","nameLocation":"2067:6:20","nodeType":"VariableDeclaration","scope":43439,"src":"2059:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2059:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2058:16:20"},"virtual":false,"visibility":"internal"},{"id":43457,"nodeType":"FunctionDefinition","src":"2244:195:20","nodes":[],"body":{"id":43456,"nodeType":"Block","src":"2350:89:20","nodes":[],"statements":[{"eventCall":{"arguments":[{"expression":{"id":43449,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2385:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2389:6:20","memberName":"sender","nodeType":"MemberAccess","src":"2385:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":43451,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2397:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2401:5:20","memberName":"value","nodeType":"MemberAccess","src":"2397:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":43453,"name":"destinationChainAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43441,"src":"2408:23:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":43448,"name":"SequencerWithdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43414,"src":"2365:19:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address)"}},"id":43454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2365:67:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43455,"nodeType":"EmitStatement","src":"2360:72:20"}]},"functionSelector":"9a977afe","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":43444,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2339:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2343:5:20","memberName":"value","nodeType":"MemberAccess","src":"2339:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":43446,"kind":"modifierInvocation","modifierName":{"id":43443,"name":"sufficientValue","nameLocations":["2323:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":43439,"src":"2323:15:20"},"nodeType":"ModifierInvocation","src":"2323:26:20"}],"name":"withdrawToSequencer","nameLocation":"2253:19:20","parameters":{"id":43442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43441,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"2281:23:20","nodeType":"VariableDeclaration","scope":43457,"src":"2273:31:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":43440,"name":"address","nodeType":"ElementaryTypeName","src":"2273:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2272:33:20"},"returnParameters":{"id":43447,"nodeType":"ParameterList","parameters":[],"src":"2350:0:20"},"scope":43479,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":43478,"nodeType":"FunctionDefinition","src":"2445:226:20","nodes":[],"body":{"id":43477,"nodeType":"Block","src":"2580:91:20","nodes":[],"statements":[{"eventCall":{"arguments":[{"expression":{"id":43469,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2611:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2615:6:20","memberName":"sender","nodeType":"MemberAccess","src":"2611:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":43471,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2623:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2627:5:20","memberName":"value","nodeType":"MemberAccess","src":"2623:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":43473,"name":"destinationChainAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43459,"src":"2634:23:20","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}},{"id":43474,"name":"memo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43461,"src":"2659:4:20","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":43468,"name":"Ics20Withdrawal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43424,"src":"2595:15:20","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,uint256,string memory,string memory)"}},"id":43475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2595:69:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":43476,"nodeType":"EmitStatement","src":"2590:74:20"}]},"functionSelector":"a996e020","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":43464,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2569:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":43465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2573:5:20","memberName":"value","nodeType":"MemberAccess","src":"2569:9:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":43466,"kind":"modifierInvocation","modifierName":{"id":43463,"name":"sufficientValue","nameLocations":["2553:15:20"],"nodeType":"IdentifierPath","referencedDeclaration":43439,"src":"2553:15:20"},"nodeType":"ModifierInvocation","src":"2553:26:20"}],"name":"withdrawToIbcChain","nameLocation":"2454:18:20","parameters":{"id":43462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43459,"mutability":"mutable","name":"destinationChainAddress","nameLocation":"2489:23:20","nodeType":"VariableDeclaration","scope":43478,"src":"2473:39:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":43458,"name":"string","nodeType":"ElementaryTypeName","src":"2473:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":43461,"mutability":"mutable","name":"memo","nameLocation":"2530:4:20","nodeType":"VariableDeclaration","scope":43478,"src":"2514:20:20","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":43460,"name":"string","nodeType":"ElementaryTypeName","src":"2514:6:20","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2472:63:20"},"returnParameters":{"id":43467,"nodeType":"ParameterList","parameters":[],"src":"2580:0:20"},"scope":43479,"stateMutability":"payable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[],"canonicalName":"AstriaWithdrawer","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[43479],"name":"AstriaWithdrawer","nameLocation":"260:16:20","scope":43480,"usedErrors":[],"usedEvents":[43414,43424]}],"license":"MIT or Apache-2.0"},"id":20} \ No newline at end of file diff --git a/crates/astria-bridge-withdrawer/ethereum/script/AstriaWithdrawer.s.sol b/crates/astria-bridge-withdrawer/ethereum/script/AstriaWithdrawer.s.sol index 02f644c481..db7cc0a7c8 100644 --- a/crates/astria-bridge-withdrawer/ethereum/script/AstriaWithdrawer.s.sol +++ b/crates/astria-bridge-withdrawer/ethereum/script/AstriaWithdrawer.s.sol @@ -8,11 +8,10 @@ contract AstriaWithdrawerScript is Script { function setUp() public {} function deploy() public { - uint32 assetWithdrawalDecimals = uint32(vm.envUint("ASSET_WITHDRAWAL_DECIMALS")); + uint32 baseChainAssetPrecision = uint32(vm.envUint("BASE_CHAIN_ASSET_PRECISION")); uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); - AstriaWithdrawer astriaWithdrawer = new AstriaWithdrawer(assetWithdrawalDecimals); - console.logAddress(address(astriaWithdrawer)); + new AstriaWithdrawer(baseChainAssetPrecision); vm.stopBroadcast(); } @@ -30,7 +29,7 @@ contract AstriaWithdrawerScript is Script { vm.stopBroadcast(); } - function withdrawToOriginChain() public { + function withdrawToIbcChain() public { uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); @@ -39,7 +38,7 @@ contract AstriaWithdrawerScript is Script { string memory destinationChainAddress = vm.envString("ORIGIN_DESTINATION_CHAIN_ADDRESS"); uint256 amount = vm.envUint("AMOUNT"); - astriaWithdrawer.withdrawToOriginChain{value: amount}(destinationChainAddress, ""); + astriaWithdrawer.withdrawToIbcChain{value: amount}(destinationChainAddress, ""); vm.stopBroadcast(); } diff --git a/crates/astria-bridge-withdrawer/ethereum/src/AstriaWithdrawer.sol b/crates/astria-bridge-withdrawer/ethereum/src/AstriaWithdrawer.sol index ea260b0877..882ade5d69 100644 --- a/crates/astria-bridge-withdrawer/ethereum/src/AstriaWithdrawer.sol +++ b/crates/astria-bridge-withdrawer/ethereum/src/AstriaWithdrawer.sol @@ -5,16 +5,24 @@ pragma solidity ^0.8.21; // // Funds can be withdrawn to either the sequencer or the origin chain via IBC. contract AstriaWithdrawer { - // the number of decimal places more the asset has on the rollup versus the base chain. + // the precision of the asset on the base chain. // - // the amount transferred on the base chain will be divided by 10^ASSET_WITHDRAWAL_DECIMALS. + // the amount transferred on the base chain will be divided by 10 ^ (18 - BASE_CHAIN_ASSET_PRECISION). // - // for example, if the rollup specifies the asset has 18 decimal places and the base chain specifies 6, - // the ASSET_WITHDRAWAL_DECIMALS would be 12. - uint32 public immutable ASSET_WITHDRAWAL_DECIMALS; + // for example, if base chain asset is precision is 6, the divisor would be 10^12. + uint32 public immutable BASE_CHAIN_ASSET_PRECISION; - constructor(uint32 assetWithdrawalDecimals) { - ASSET_WITHDRAWAL_DECIMALS = assetWithdrawalDecimals; + // the divisor used to convert the rollup asset amount to the base chain denomination + // + // set to 10^ASSET_WITHDRAWAL_DECIMALS on contract creation + uint256 private immutable DIVISOR; + + constructor(uint32 _baseChainAssetPrecision) { + if (_baseChainAssetPrecision > 18) { + revert("AstriaWithdrawer: base chain asset precision must be less than or equal to 18"); + } + BASE_CHAIN_ASSET_PRECISION = _baseChainAssetPrecision; + DIVISOR = 10 ** (18 - _baseChainAssetPrecision); } // emitted when a withdrawal to the sequencer is initiated @@ -30,12 +38,17 @@ contract AstriaWithdrawer { // the `destinationChainAddress` is the address on the origin chain the funds will be sent to // the `memo` is an optional field that will be used as the ICS20 packet memo event Ics20Withdrawal(address indexed sender, uint256 indexed amount, string destinationChainAddress, string memo); + + modifier sufficientValue(uint256 amount) { + require(amount / DIVISOR > 0, "AstriaWithdrawer: insufficient value, must be greater than 10 ** (18 - BASE_CHAIN_ASSET_PRECISION)"); + _; + } - function withdrawToSequencer(address destinationChainAddress) external payable { + function withdrawToSequencer(address destinationChainAddress) external payable sufficientValue(msg.value) { emit SequencerWithdrawal(msg.sender, msg.value, destinationChainAddress); } - function withdrawToOriginChain(string calldata destinationChainAddress, string calldata memo) external payable { + function withdrawToIbcChain(string calldata destinationChainAddress, string calldata memo) external payable sufficientValue(msg.value) { emit Ics20Withdrawal(msg.sender, msg.value, destinationChainAddress, memo); } } diff --git a/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/test_utils.rs b/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/test_utils.rs index 9a91164d23..e4f857e5a6 100644 --- a/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/test_utils.rs +++ b/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/test_utils.rs @@ -10,6 +10,22 @@ use ethers::{ utils::AnvilInstance, }; +#[derive(Default)] +pub(crate) struct ConfigureAstriaWithdrawerDeployer { + pub(crate) base_chain_asset_precision: u32, +} + +impl ConfigureAstriaWithdrawerDeployer { + pub(crate) async fn deploy( + &mut self, + ) -> (Address, Arc>, LocalWallet, AnvilInstance) { + if self.base_chain_asset_precision == 0 { + self.base_chain_asset_precision = 18; + } + deploy_astria_withdrawer(self.base_chain_asset_precision.into()).await + } +} + /// Starts a local anvil instance and deploys the `AstriaWithdrawer` contract to it. /// /// Returns the contract address, provider, wallet, and anvil instance. @@ -20,8 +36,9 @@ use ethers::{ /// - if the contract cannot be compiled /// - if the provider fails to connect to the anvil instance /// - if the contract fails to deploy -pub(crate) async fn deploy_astria_withdrawer() --> (Address, Arc>, LocalWallet, AnvilInstance) { +pub(crate) async fn deploy_astria_withdrawer( + base_chain_asset_precision: U256, +) -> (Address, Arc>, LocalWallet, AnvilInstance) { // compile contract for testing let source = Path::new(&env!("CARGO_MANIFEST_DIR")).join("ethereum/src/AstriaWithdrawer.sol"); let input = CompilerInput::new(source.clone()) @@ -53,9 +70,13 @@ pub(crate) async fn deploy_astria_withdrawer() wallet.clone().with_chain_id(anvil.chain_id()), ); - // deploy contract with ASSET_WITHDRAWAL_DECIMALS as 0 let factory = ContractFactory::new(abi, bytecode, signer.into()); - let contract = factory.deploy(U256::from(0)).unwrap().send().await.unwrap(); + let contract = factory + .deploy(base_chain_asset_precision) + .unwrap() + .send() + .await + .unwrap(); let contract_address = contract.address(); ( diff --git a/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/watcher.rs b/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/watcher.rs index c6fde23607..64343d0057 100644 --- a/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/watcher.rs +++ b/crates/astria-bridge-withdrawer/src/withdrawer/ethereum/watcher.rs @@ -108,12 +108,16 @@ impl Watcher { ); let contract = AstriaWithdrawer::new(contract_address, provider); - let asset_withdrawal_decimals = contract - .asset_withdrawal_decimals() + let base_chain_asset_precision = contract + .base_chain_asset_precision() .call() .await .wrap_err("failed to get asset withdrawal decimals")?; - let asset_withdrawal_divisor = 10u128.pow(asset_withdrawal_decimals); + let asset_withdrawal_divisor = + 10u128.pow(18u32.checked_sub(base_chain_asset_precision).expect( + "base_chain_asset_precision must be <= 18, as the contract constructor enforces \ + this", + )); let batcher = Batcher::new( event_rx, @@ -323,7 +327,7 @@ mod tests { SequencerWithdrawalFilter, }, convert::EventWithMetadata, - test_utils::deploy_astria_withdrawer, + test_utils::ConfigureAstriaWithdrawerDeployer, }; #[test] @@ -368,10 +372,30 @@ mod tests { receipt } + #[tokio::test] + #[ignore = "requires foundry and solc to be installed"] + async fn astria_withdrawer_invalid_value_fails() { + let (contract_address, provider, wallet, _anvil) = ConfigureAstriaWithdrawerDeployer { + base_chain_asset_precision: 15, + } + .deploy() + .await; + let signer = Arc::new(SignerMiddleware::new(provider, wallet.clone())); + let contract = AstriaWithdrawer::new(contract_address, signer.clone()); + + let value: U256 = 999.into(); // 10^3 - 1 + let recipient = [0u8; 20].into(); + let tx = contract.withdraw_to_sequencer(recipient).value(value); + tx.send() + .await + .expect_err("`withdraw` transaction should have failed due to value < 10^3"); + } + #[tokio::test] #[ignore = "requires foundry and solc to be installed"] async fn watcher_can_watch_sequencer_withdrawals() { - let (contract_address, provider, wallet, anvil) = deploy_astria_withdrawer().await; + let (contract_address, provider, wallet, anvil) = + ConfigureAstriaWithdrawerDeployer::default().deploy().await; let signer = Arc::new(SignerMiddleware::new(provider, wallet.clone())); let contract = AstriaWithdrawer::new(contract_address, signer.clone()); @@ -428,7 +452,7 @@ mod tests { recipient: String, ) -> TransactionReceipt { let tx = contract - .withdraw_to_origin_chain(recipient, "nootwashere".to_string()) + .withdraw_to_ibc_chain(recipient, "nootwashere".to_string()) .value(value); let receipt = tx .send() @@ -449,7 +473,8 @@ mod tests { #[tokio::test] #[ignore = "requires foundry and solc to be installed"] async fn watcher_can_watch_ics20_withdrawals() { - let (contract_address, provider, wallet, anvil) = deploy_astria_withdrawer().await; + let (contract_address, provider, wallet, anvil) = + ConfigureAstriaWithdrawerDeployer::default().deploy().await; let signer = Arc::new(SignerMiddleware::new(provider, wallet.clone())); let contract = AstriaWithdrawer::new(contract_address, signer.clone());