diff --git a/op-bindings/bindings/weth9.go b/op-bindings/bindings/weth9.go index 5c708a49e7d68..ea50fcb0c490b 100644 --- a/op-bindings/bindings/weth9.go +++ b/op-bindings/bindings/weth9.go @@ -31,7 +31,7 @@ var ( // WETH9MetaData contains all meta data concerning the WETH9 contract. var WETH9MetaData = &bind.MetaData{ ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582097535febf1aaaa55cc90c4da08f528faef2bfe1cff05b0d29e635ce42047349664736f6c63430005110032", + Bin: "0x60c0604052600d60808190526c2bb930b83832b21022ba3432b960991b60a090815261002e916000919061007a565b50604080518082019091526004808252630ae8aa8960e31b602090920191825261005a9160019161007a565b506002805460ff1916601217905534801561007457600080fd5b50610115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100bb57805160ff19168380011785556100e8565b828001600101855582156100e8579182015b828111156100e85782518255916020019190600101906100cd565b506100f49291506100f8565b5090565b61011291905b808211156100f457600081556001016100fe565b90565b6107f9806101246000396000f3fe6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820fd69d075d01838a66174ca9cefc98bf8f255e049a94475b253ffc70bf383f90564736f6c63430005110032", } // WETH9ABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/weth9_more.go b/op-bindings/bindings/weth9_more.go index d64ac95205b79..bccc75827e1da 100644 --- a/op-bindings/bindings/weth9_more.go +++ b/op-bindings/bindings/weth9_more.go @@ -13,7 +13,7 @@ const WETH9StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"con var WETH9StorageLayout = new(solc.StorageLayout) -var WETH9DeployedBin = "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a7231582097535febf1aaaa55cc90c4da08f528faef2bfe1cff05b0d29e635ce42047349664736f6c63430005110032" +var WETH9DeployedBin = "0x6080604052600436106100bc5760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146102cb578063d0e30db0146100bc578063dd62ed3e14610311576100bc565b8063313ce5671461024b57806370a082311461027657806395d89b41146102b6576100bc565b806318160ddd116100a557806318160ddd146101aa57806323b872dd146101d15780632e1a7d4d14610221576100bc565b806306fdde03146100c6578063095ea7b314610150575b6100c4610359565b005b3480156100d257600080fd5b506100db6103a8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101155781810151838201526020016100fd565b50505050905090810190601f1680156101425780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561015c57600080fd5b506101966004803603604081101561017357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610454565b604080519115158252519081900360200190f35b3480156101b657600080fd5b506101bf6104c7565b60408051918252519081900360200190f35b3480156101dd57600080fd5b50610196600480360360608110156101f457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356104cb565b34801561022d57600080fd5b506100c46004803603602081101561024457600080fd5b503561066b565b34801561025757600080fd5b50610260610700565b6040805160ff9092168252519081900360200190f35b34801561028257600080fd5b506101bf6004803603602081101561029957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610709565b3480156102c257600080fd5b506100db61071b565b3480156102d757600080fd5b50610196600480360360408110156102ee57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610793565b34801561031d57600080fd5b506101bf6004803603604081101561033457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166107a7565b33600081815260036020908152604091829020805434908101909155825190815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a2565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b820191906000526020600020905b81548152906001019060200180831161042f57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b4790565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156104fd57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610573575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b156105ed5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020548211156105b557600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020805483900390555b73ffffffffffffffffffffffffffffffffffffffff808516600081815260036020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b3360009081526003602052604090205481111561068757600080fd5b33600081815260036020526040808220805485900390555183156108fc0291849190818181858888f193505050501580156106c6573d6000803e3d6000fd5b5060408051828152905133917f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65919081900360200190a250565b60025460ff1681565b60036020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152929183018282801561044c5780601f106104215761010080835404028352916020019161044c565b60006107a03384846104cb565b9392505050565b60046020908152600092835260408084209091529082529020548156fea265627a7a72315820fd69d075d01838a66174ca9cefc98bf8f255e049a94475b253ffc70bf383f90564736f6c63430005110032" func init() { if err := json.Unmarshal([]byte(WETH9StorageLayoutJSON), WETH9StorageLayout); err != nil { diff --git a/package.json b/package.json index 5591b861a4b76..3ef1a80c3eac4 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,7 @@ "@eth-optimism/contracts-periphery/ds-test", "@eth-optimism/contracts-periphery/forge-std", "@eth-optimism/contracts-periphery/@rari-capital/solmate", - "forta-agent", - "@eth-optimism/contracts-bedrock/@safe-global/safe-contracts", - "@eth-optimism/contracts-bedrock/solady" + "forta-agent" ] }, "private": true, diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index d8f6442f1e2ea..a6df10b4237a2 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -9,9 +9,7 @@ remappings = [ '@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/', '@rari-capital/solmate/=node_modules/@rari-capital/solmate', 'forge-std/=node_modules/forge-std/src', - 'ds-test/=node_modules/ds-test/src', - '@safe-global/safe-contracts=node_modules/@safe-global/safe-contracts/', - 'solady/=node_modules/solady/src' + 'ds-test/=node_modules/ds-test/src' ] extra_output = ['devdoc', 'userdoc', 'metadata', 'storageLayout'] bytecode_hash = 'none' diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json index fdb0b6318c412..400378e7d0fb1 100644 --- a/packages/contracts-bedrock/package.json +++ b/packages/contracts-bedrock/package.json @@ -80,8 +80,6 @@ "forge-std": "https://github.com/foundry-rs/forge-std.git#46264e9788017fc74f9f58b7efa0bc6e1df6d410", "glob": "^7.1.6", "hardhat-deploy": "^0.11.4", - "@safe-global/safe-contracts": "https://github.com/safe-global/safe-contracts.git#v1.3.0-libs.0", - "solady": "https://github.com/Vectorized/solady.git#v0.0.85", "solhint": "^3.3.7", "solhint-plugin-prettier": "^0.0.5", "ts-node": "^10.9.1", diff --git a/packages/contracts-bedrock/scripts/upgrades/PostSherlock.s.sol b/packages/contracts-bedrock/scripts/upgrades/PostSherlock.s.sol deleted file mode 100644 index 56f5e6ef43c5f..0000000000000 --- a/packages/contracts-bedrock/scripts/upgrades/PostSherlock.s.sol +++ /dev/null @@ -1,442 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.15; - -import { console } from "forge-std/console.sol"; -import { Script } from "forge-std/Script.sol"; -import { IMulticall3 } from "forge-std/interfaces/IMulticall3.sol"; -import { GnosisSafe } from "@safe-global/safe-contracts/contracts/GnosisSafe.sol"; -import { LibSort } from "solady/utils/LibSort.sol"; -import { Enum } from "@safe-global/safe-contracts/contracts/common/Enum.sol"; -import { ProxyAdmin } from "../../contracts/universal/ProxyAdmin.sol"; -import { Constants } from "../../contracts/libraries/Constants.sol"; -import { SystemConfig } from "../../contracts/L1/SystemConfig.sol"; -import { ResourceMetering } from "../../contracts/L1/ResourceMetering.sol"; -import { Semver } from "../../contracts/universal/Semver.sol"; - -/** - * @title PostSherlock - * @notice Upgrade script for upgrading the L1 contracts after the sherlock audit. - * Assumes that a gnosis safe is used as the privileged account and the same - * gnosis safe is the owner of the system config and the proxy admin. - * This could be optimized by checking for the number of approvals up front - * and not submitting the final approval as `execTransaction` can be called when - * there are `threshold - 1` approvals. - * Uses the "approved hashes" method of interacting with the gnosis safe. Allows - * for the most simple user experience when using automation and no indexer. - * Run the command without the `--broadcast` flag and it will print a tenderly URL. - */ -contract PostSherlock is Script { - /** - * @notice Interface for multicall3. - */ - IMulticall3 private constant multicall = IMulticall3(MULTICALL3_ADDRESS); - - /** - * @notice Mainnet chain id. - */ - uint256 constant MAINNET = 1; - - /** - * @notice Goerli chain id. - */ - uint256 constant GOERLI = 5; - - /** - * @notice Represents a set of L1 contracts. Used to represent a set of - * implementations and also a set of proxies. - */ - struct ContractSet { - address L1CrossDomainMessenger; - address L1StandardBridge; - address L2OutputOracle; - address OptimismMintableERC20Factory; - address OptimismPortal; - address SystemConfig; - address L1ERC721Bridge; - } - - /** - * @notice A mapping of chainid to a ContractSet of implementations. - */ - mapping(uint256 => ContractSet) internal implementations; - - /** - * @notice A mapping of chainid to ContractSet of proxy addresses. - */ - mapping(uint256 => ContractSet) internal proxies; - - /** - * @notice An array of approvals, used to generate the execution transaction. - */ - address[] internal approvals; - - /** - * @notice The expected versions for the contracts to be upgraded to. - */ - string constant internal L1CrossDomainMessenger_Version = "1.1.0"; - string constant internal L1StandardBridge_Version = "1.1.0"; - string constant internal L2OutputOracle_Version = "1.2.0"; - string constant internal OptimismMintableERC20Factory_Version = "1.1.0"; - string constant internal OptimismPortal_Version = "1.3.0"; - string constant internal SystemConfig_Version = "1.2.0"; - string constant internal L1ERC721Bridge_Version = "1.1.0"; - - /** - * @notice Place the contract addresses in storage so they can be used when building calldata. - */ - function setUp() external { - implementations[GOERLI] = ContractSet({ - L1CrossDomainMessenger: 0xfa37a4b2D49E21De63fa2b13D6dB213081E020b3, - L1StandardBridge: 0x79179704077E3324CC745A24a5CcC2a80A9B6842, - L2OutputOracle: 0x47bBB9054823f27B9B6A71F5cb0eBc785692FF2E, - OptimismMintableERC20Factory: 0xF516Fa87f89E4AC7C299aE28263e9EB851dE4781, - OptimismPortal: 0xa24A444C6ceeb1d4Fc19D1B78913C22B9d03BbC9, - SystemConfig: 0x2FFfe603caA9FA2C20E7F349138475a43284a6b1, - L1ERC721Bridge: 0xb460323429B08B9d1d427e6b8A450532988d5fe8 - }); - - proxies[GOERLI] = ContractSet({ - L1CrossDomainMessenger: 0x5086d1eEF304eb5284A0f6720f79403b4e9bE294, - L1StandardBridge: 0x636Af16bf2f682dD3109e60102b8E1A089FedAa8, - L2OutputOracle: 0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0, - OptimismMintableERC20Factory: 0x883dcF8B05364083D849D8bD226bC8Cb4c42F9C5, - OptimismPortal: 0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383, - SystemConfig: 0xAe851f927Ee40dE99aaBb7461C00f9622ab91d60, - L1ERC721Bridge: 0x8DD330DdE8D9898d43b4dc840Da27A07dF91b3c9 - }); - } - - /** - * @notice The entrypoint to this script. - */ - function run(address _safe, address _proxyAdmin) external returns (bool) { - vm.startBroadcast(); - bool success = _run(_safe, _proxyAdmin); - if (success) _postCheck(); - return success; - } - - /** - * @notice The implementation of the upgrade. Split into its own function - * to allow for testability. This is subject to a race condition if - * the nonce changes by a different transaction finalizing while not - * all of the signers have used this script. - */ - function _run(address _safe, address _proxyAdmin) public returns (bool) { - // Ensure that the required contracts exist - require(address(multicall).code.length > 0, "multicall3 not deployed"); - require(_safe.code.length > 0, "no code at safe address"); - require(_proxyAdmin.code.length > 0, "no code at proxy admin address"); - - GnosisSafe safe = GnosisSafe(payable(_safe)); - uint256 nonce = safe.nonce(); - - bytes memory data = buildCalldata(_proxyAdmin); - - // Compute the safe transaction hash - bytes32 hash = safe.getTransactionHash({ - to: address(multicall), - value: 0, - data: data, - operation: Enum.Operation.DelegateCall, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: address(0), - _nonce: nonce - }); - - // Send a transaction to approve the hash - safe.approveHash(hash); - - logSimulationLink({ - _to: address(safe), - _from: msg.sender, - _data: abi.encodeCall(safe.approveHash, (hash)) - }); - - uint256 threshold = safe.getThreshold(); - address[] memory owners = safe.getOwners(); - - for (uint256 i; i < owners.length; i++) { - address owner = owners[i]; - uint256 approved = safe.approvedHashes(owner, hash); - if (approved == 1) { - approvals.push(owner); - } - } - - if (approvals.length >= threshold) { - bytes memory signatures = buildSignatures(); - - bool success = safe.execTransaction({ - to: address(multicall), - value: 0, - data: data, - operation: Enum.Operation.DelegateCall, - safeTxGas: 0, - baseGas: 0, - gasPrice: 0, - gasToken: address(0), - refundReceiver: payable(address(0)), - signatures: signatures - }); - - logSimulationLink({ - _to: address(safe), - _from: msg.sender, - _data: abi.encodeCall( - safe.execTransaction, - ( - address(multicall), - 0, - data, - Enum.Operation.DelegateCall, - 0, - 0, - 0, - address(0), - payable(address(0)), - signatures - ) - ) - }); - - require(success, "call not successful"); - return true; - } else { - console.log("not enough approvals"); - } - - // Reset the approvals because they are only used transiently. - assembly { - sstore(approvals.slot, 0) - } - - return false; - } - - /** - * @notice Log a tenderly simulation link. The TENDERLY_USERNAME and TENDERLY_PROJECT - * environment variables will be used if they are present. The vm is staticcall'ed - * because of a compiler issue with the higher level ABI. - */ - function logSimulationLink(address _to, bytes memory _data, address _from) public view { - (, bytes memory projData) = VM_ADDRESS.staticcall( - abi.encodeWithSignature("envOr(string,string)", "TENDERLY_PROJECT", "TENDERLY_PROJECT") - ); - string memory proj = abi.decode(projData, (string)); - - (, bytes memory userData) = VM_ADDRESS.staticcall( - abi.encodeWithSignature("envOr(string,string)", "TENDERLY_USERNAME", "TENDERLY_USERNAME") - ); - string memory username = abi.decode(userData, (string)); - - string memory str = string.concat( - "https://dashboard.tenderly.co/", - username, - "/", - proj, - "/simulator/new?network=", - vm.toString(block.chainid), - "&contractAddress=", - vm.toString(_to), - "&rawFunctionInput=", - vm.toString(_data), - "&from=", - vm.toString(_from) - ); - console.log(str); - } - - /** - * @notice Follow up assertions to ensure that the script ran to completion. - */ - function _postCheck() internal view { - ContractSet memory prox = getProxies(); - require(_versionHash(prox.L1CrossDomainMessenger) == keccak256(bytes(L1CrossDomainMessenger_Version))); - require(_versionHash(prox.L1StandardBridge) == keccak256(bytes(L1StandardBridge_Version))); - require(_versionHash(prox.L2OutputOracle) == keccak256(bytes(L2OutputOracle_Version))); - require(_versionHash(prox.OptimismMintableERC20Factory) == keccak256(bytes(OptimismMintableERC20Factory_Version))); - require(_versionHash(prox.OptimismPortal) == keccak256(bytes(OptimismPortal_Version))); - require(_versionHash(prox.SystemConfig) == keccak256(bytes(SystemConfig_Version))); - require(_versionHash(prox.L1ERC721Bridge) == keccak256(bytes(L1ERC721Bridge_Version))); - - ResourceMetering.ResourceConfig memory rcfg = SystemConfig(prox.SystemConfig).resourceConfig(); - ResourceMetering.ResourceConfig memory dflt = Constants.DEFAULT_RESOURCE_CONFIG(); - require(keccak256(abi.encode(rcfg)) == keccak256(abi.encode(dflt))); - } - - /** - * @notice Helper function used to compute the hash of Semver's version string to be used in a - * comparison. - */ - function _versionHash(address _addr) internal view returns (bytes32) { - return keccak256(bytes(Semver(_addr).version())); - } - - /** - * @notice Test coverage of the logic. Should only run on goerli but other chains - * could be added. - */ - function test_script_succeeds() skipWhenNotForking external { - address safe; - address proxyAdmin; - - if (block.chainid == GOERLI) { - safe = 0xBc1233d0C3e6B5d53Ab455cF65A6623F6dCd7e4f; - proxyAdmin = 0x01d3670863c3F4b24D7b107900f0b75d4BbC6e0d; - } - - require(safe != address(0) && proxyAdmin != address(0)); - - address[] memory owners = GnosisSafe(payable(safe)).getOwners(); - - for (uint256 i; i < owners.length; i++) { - address owner = owners[i]; - vm.startBroadcast(owner); - bool success = _run(safe, proxyAdmin); - vm.stopBroadcast(); - - if (success) { - console.log("tx success"); - break; - } - } - - _postCheck(); - } - - /** - * @notice Builds the signatures by tightly packing them together. - * Ensures that they are sorted. - */ - function buildSignatures() internal view returns (bytes memory) { - address[] memory addrs = new address[](approvals.length); - for (uint256 i; i < approvals.length; i++) { - addrs[i] = approvals[i]; - } - - LibSort.sort(addrs); - - bytes memory signatures; - uint8 v = 1; - bytes32 s = bytes32(0); - for (uint256 i; i < addrs.length; i++) { - bytes32 r = bytes32(uint256(uint160(addrs[i]))); - signatures = bytes.concat(signatures, abi.encodePacked(r, s, v)); - } - return signatures; - } - - /** - * @notice Builds the calldata that the multisig needs to make for the upgrade to happen. - * A total of 8 calls are made, 7 upgrade implementations and 1 sets the resource - * config to the default value in the SystemConfig contract. - */ - function buildCalldata(address _proxyAdmin) internal view returns (bytes memory) { - IMulticall3.Call3[] memory calls = new IMulticall3.Call3[](8); - - ContractSet memory impl = getImplementations(); - ContractSet memory prox = getProxies(); - - // Upgrade the L1CrossDomainMessenger - calls[0] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.L1CrossDomainMessenger), impl.L1CrossDomainMessenger) - ) - }); - - // Upgrade the L1StandardBridge - calls[1] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.L1StandardBridge), impl.L1StandardBridge) - ) - }); - - // Upgrade the L2OutputOracle - calls[2] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.L2OutputOracle), impl.L2OutputOracle) - ) - }); - - // Upgrade the OptimismMintableERC20Factory - calls[3] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.OptimismMintableERC20Factory), impl.OptimismMintableERC20Factory) - ) - }); - - // Upgrade the OptimismPortal - calls[4] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.OptimismPortal), impl.OptimismPortal) - ) - }); - - // Upgrade the SystemConfig - calls[5] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.SystemConfig), impl.SystemConfig) - ) - }); - - // Upgrade the L1ERC721Bridge - calls[6] = IMulticall3.Call3({ - target: _proxyAdmin, - allowFailure: false, - callData: abi.encodeCall( - ProxyAdmin.upgrade, - (payable(prox.L1ERC721Bridge), impl.L1ERC721Bridge) - ) - }); - - // Set the default resource config - ResourceMetering.ResourceConfig memory rcfg = Constants.DEFAULT_RESOURCE_CONFIG(); - calls[7] = IMulticall3.Call3({ - target: prox.SystemConfig, - allowFailure: false, - callData: abi.encodeCall(SystemConfig.setResourceConfig, (rcfg)) - }); - - return abi.encodeCall(IMulticall3.aggregate3, (calls)); - } - - /** - * @notice Returns the ContractSet that represents the implementations for a given network. - */ - function getImplementations() internal view returns (ContractSet memory) { - ContractSet memory set = implementations[block.chainid]; - require(set.L1CrossDomainMessenger != address(0), "no implementations for this network"); - return set; - } - - /** - * @notice Returns the ContractSet that represents the proxies for a given network. - */ - function getProxies() internal view returns (ContractSet memory) { - ContractSet memory set = proxies[block.chainid]; - require(set.L1CrossDomainMessenger != address(0), "no proxies for this network"); - return set; - } -} diff --git a/yarn.lock b/yarn.lock index b6b4b1c76e42a..f684f3b83a1b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3760,10 +3760,6 @@ "@safe-global/safe-gateway-typescript-sdk" "^3.5.3" ethers "^5.7.2" -"@safe-global/safe-contracts@https://github.com/safe-global/safe-contracts.git#v1.3.0-libs.0": - version "1.3.0" - resolved "https://github.com/safe-global/safe-contracts.git#767ef36bba88bdbc0c9fe3708a4290cabef4c376" - "@safe-global/safe-gateway-typescript-sdk@^3.5.3": version "3.7.0" resolved "https://registry.yarnpkg.com/@safe-global/safe-gateway-typescript-sdk/-/safe-gateway-typescript-sdk-3.7.0.tgz#2af52f1bc73759b1b6a549fed598781c8c5fce72" @@ -19358,10 +19354,6 @@ socks@^2.3.3, socks@^2.6.1: ip "^1.1.5" smart-buffer "^4.1.0" -"solady@https://github.com/Vectorized/solady.git#v0.0.85": - version "0.0.85" - resolved "https://github.com/Vectorized/solady.git#507e0d84872f435d497e6d2ce10e7f484392db4f" - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"