Address Contract Verified
Address
0xdDdDDddDDDdDDDBBdDb371c9C41Cb2572fA6DeCf
Balance
0 ETH
Nonce
1
Code Size
16323 bytes
Creator
0x11a4A90C...b952 at tx 0x318413ef...f00e23
Indexed Transactions
0
Contract Bytecode
16323 bytes
0x608060405234801561000f575f80fd5b5060043610610340575f3560e01c80637419f190116101b6578063c4968c9a11610102578063dd62ed3e116100a0578063ecdd98be1161007a578063ecdd98be14610988578063ef037fb9146109a6578063f0f44260146109c2578063f2fde38b146109de57610340565b8063dd62ed3e1461091e578063deac361a1461094e578063e63ea4081461096c57610340565b8063cca1ef6e116100dc578063cca1ef6e14610896578063d5abeb01146108c6578063d5e1fc1f146108e4578063d9565b031461090057610340565b8063c4968c9a1461083e578063c55dae631461085c578063cc1b63d51461087a57610340565b806395d89b411161016f578063a85667c511610149578063a85667c5146107ca578063a9059cbb146107e6578063af14052c14610816578063be8edf5c1461082057610340565b806395d89b4114610760578063a4168bcf1461077e578063a694fc3a146107ae57610340565b80637419f190146106ae5780637ed8f653146106cc57806383e373b0146106ea57806389edeb74146107085780638bd1d033146107265780638da5cb5b1461074257610340565b80632e187a681161029057806351d4a5801161022e578063663dcdbc11610208578063663dcdbc14610638578063665a11ca1461065657806370a0823114610674578063715018a6146106a457610340565b806351d4a580146105de578063529bed7f146105fc57806361d027b31461061a57610340565b80634508a6cc1161026a5780634508a6cc1461055457806345885bfe146105845780634a7c4d18146105a25780634befa981146105c057610340565b80632e187a68146104fa57806330643c4114610518578063313ce5671461053657610340565b806316bb6c13116102fd5780631ad25ffb116102d75780631ad25ffb1461046057806323b872dd146104905780632986c0e5146104c05780632e17de78146104de57610340565b806316bb6c131461040857806318160ddd146104245780631924063e1461044257610340565b8063018770201461034457806306fdde0314610360578063095ea7b31461037e57806309bc773f146103ae5780630f336d48146103cc578063118ab4e1146103ea575b5f80fd5b61035e60048036038101906103599190612d51565b6109fa565b005b610368610a88565b6040516103759190612dec565b60405180910390f35b61039860048036038101906103939190612e3f565b610b14565b6040516103a59190612e97565b60405180910390f35b6103b6610b2a565b6040516103c39190612ebf565b60405180910390f35b6103d4610b30565b6040516103e19190612ebf565b60405180910390f35b6103f2610d81565b6040516103ff9190612ebf565b60405180910390f35b610422600480360381019061041d9190612d51565b610d87565b005b61042c610e6a565b6040516104399190612ebf565b60405180910390f35b61044a610e73565b6040516104579190612ebf565b60405180910390f35b61047a60048036038101906104759190612d51565b610e79565b6040516104879190612ebf565b60405180910390f35b6104aa60048036038101906104a59190612ed8565b610e8e565b6040516104b79190612e97565b60405180910390f35b6104c8610f7b565b6040516104d59190612ebf565b60405180910390f35b6104f860048036038101906104f39190612f28565b610f8a565b005b61050261132f565b60405161050f9190612ebf565b60405180910390f35b610520611335565b60405161052d9190612ebf565b60405180910390f35b61053e61133b565b60405161054b9190612f6e565b60405180910390f35b61056e60048036038101906105699190612f28565b61134d565b60405161057b9190612ebf565b60405180910390f35b61058c611375565b6040516105999190612ebf565b60405180910390f35b6105aa61137e565b6040516105b79190612ebf565b60405180910390f35b6105c8611384565b6040516105d59190612ebf565b60405180910390f35b6105e66113a4565b6040516105f39190612ebf565b60405180910390f35b6106046113aa565b6040516106119190612ebf565b60405180910390f35b6106226113f8565b60405161062f9190612f96565b60405180910390f35b61064061141d565b60405161064d9190612ebf565b60405180910390f35b61065e611433565b60405161066b9190612f96565b60405180910390f35b61068e60048036038101906106899190612d51565b611458565b60405161069b9190612ebf565b60405180910390f35b6106ac6114ab565b005b6106b66114be565b6040516106c39190612ebf565b60405180910390f35b6106d46114c4565b6040516106e19190612ebf565b60405180910390f35b6106f26114ca565b6040516106ff9190612ebf565b60405180910390f35b6107106114d0565b60405161071d9190612ebf565b60405180910390f35b610740600480360381019061073b9190612faf565b6114d6565b005b61074a611580565b6040516107579190612f96565b60405180910390f35b6107686115a7565b6040516107759190612dec565b60405180910390f35b61079860048036038101906107939190612f28565b611633565b6040516107a59190612ebf565b60405180910390f35b6107c860048036038101906107c39190612f28565b61165b565b005b6107e460048036038101906107df9190612f28565b61196c565b005b61080060048036038101906107fb9190612e3f565b611a07565b60405161080d9190612e97565b60405180910390f35b61081e611a1d565b005b610828611bda565b6040516108359190612ebf565b60405180910390f35b610846611cc2565b6040516108539190612ebf565b60405180910390f35b610864611cc8565b6040516108719190612f96565b60405180910390f35b610894600480360381019061088f9190612f28565b611cee565b005b6108b060048036038101906108ab9190612d51565b611d7b565b6040516108bd9190612ebf565b60405180910390f35b6108ce611dec565b6040516108db9190612ebf565b60405180910390f35b6108fe60048036038101906108f99190612e3f565b611df2565b005b610908611e42565b6040516109159190612ebf565b60405180910390f35b61093860048036038101906109339190613013565b611e48565b6040516109459190612ebf565b60405180910390f35b610956611eca565b6040516109639190612ebf565b60405180910390f35b61098660048036038101906109819190612ed8565b611ed0565b005b610990611fc7565b60405161099d9190612ebf565b60405180910390f35b6109c060048036038101906109bb9190612f28565b611fcd565b005b6109dc60048036038101906109d79190612d51565b612016565b005b6109f860048036038101906109f39190612d51565b6120a4565b005b610a02612128565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fe57f71636571365571c0eaeaeb54e1d9e0065804f056a57a2a29448524f7d18a60405160405180910390a250565b60018054610a959061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac19061307e565b8015610b0c5780601f10610ae357610100808354040283529160200191610b0c565b820191905f5260205f20905b815481529060010190602001808311610aef57829003601f168201915b505050505081565b5f610b203384846121af565b6001905092915050565b600b5481565b5f8060105490505f600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823160045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610bb49190612f96565b602060405180830381865afa158015610bcf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf391906130c2565b90505f8111610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613137565b60405180910390fd5b5f60095411610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c729061319f565b60405180910390fd5b5f81670de0b6b3a764000084610c9191906131ea565b610c9b9190613258565b9050670de0b6b3a7640000600a610cb291906131ea565b811115610cd157670de0b6b3a7640000600a610cce91906131ea565b90505b5f670de0b6b3a764000060095483610ce991906131ea565b610cf39190613258565b90505f81670de0b6b3a7640000610d0a9190613288565b90505f610d1682612372565b90505f610d30600a600954610d2b91906131ea565b612372565b82600754600854610d4191906132bb565b610d4b91906131ea565b610d559190613258565b600854610d6291906132bb565b9050600754811015610d745760075490505b8097505050505050505090565b60065481565b610d8f612128565b5f151560165f9054906101000a900460ff16151514610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda9061335e565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f9ee7d7a42466d19669fb88ad7a5b03861d6abd7d2a681c83dd982207cfaeb37060405160405180910390a250565b5f601054905090565b600e5481565b6019602052805f5260405f205f915090505481565b5f8060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f45906133ec565b60405180910390fd5b610f598585856124a4565b610f6f85338584610f6a91906132bb565b6121af565b60019150509392505050565b5f610f8530611458565b905090565b60155460195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205442610fd691906132bb565b1015611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90613454565b60405180910390fd5b61101f611a1d565b5f6011548261102e91906131ea565b90508060175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a7906134bc565b60405180910390fd5b6110ba33836128a3565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b81526004016111179291906134da565b5f604051808303815f87803b15801561112e575f80fd5b505af1158015611140573d5f803e3d5ffd5b505050505f612710600c548461115691906131ea565b6111609190613258565b90505f818461116f91906132bb565b9050600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111ce9291906134da565b6020604051808303815f875af11580156111ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120e919061352b565b505f8211156112d757600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016112959291906134da565b6020604051808303815f875af11580156112b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d5919061352b565b505b3373ffffffffffffffffffffffffffffffffffffffff167ffbd65cfd6de1493db337385c0712095397ecbd0504df64b861cdfceb80c7b42285848460405161132193929190613556565b60405180910390a250505050565b60105481565b60125481565b60035f9054906101000a900460ff1681565b5f80612710600c548461136091906131ea565b61136a9190613258565b905080915050919050565b5f600654905090565b60095481565b5f61138d610b30565b611395611375565b61139f9190613288565b905090565b60075481565b5f600d544210156113ca5742600d546113c391906132bb565b90506113f5565b600a54600d54426113db91906132bb565b6113e5919061358b565b600a546113f291906132bb565b90505b90565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60125460135461142e91906132bb565b905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60115460175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114a49190613258565b9050919050565b6114b3612128565b6114bc5f612a67565b565b600d5481565b60115481565b600c5481565b600a5481565b6114de612128565b81831115611521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151890613605565b60405180910390fd5b836006819055508260078190555081600881905550806009819055507f56868216d91d6464abc5e886219763832e60a15138e4b9b39622e814215ccc7c848484846040516115729493929190613623565b60405180910390a150505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600280546115b49061307e565b80601f01602080910402602001604051908101604052809291908181526020018280546115e09061307e565b801561162b5780601f106116025761010080835404028352916020019161162b565b820191905f5260205f20905b81548152906001019060200180831161160e57829003601f168201915b505050505081565b5f80612710600b548461164691906131ea565b6116509190613258565b905080915050919050565b611663611a1d565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016116c293929190613666565b6020604051808303815f875af11580156116de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611702919061352b565b611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906136e5565b60405180910390fd5b5f612710600b548361175391906131ea565b61175d9190613258565b90505f818361176c91906132bb565b9050600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b81526004016117c99190612ebf565b5f604051808303815f87803b1580156117e0575f80fd5b505af11580156117f2573d5f803e3d5ffd5b505050505f8211156118be57600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161187c9291906134da565b6020604051808303815f875af1158015611898573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bc919061352b565b505b6118c83382612b28565b5f6015541115611915574260195f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b3373ffffffffffffffffffffffffffffffffffffffff167ff556991011e831bcfac4f406d547e5e32cdd98267efab83935230d5f8d02c44684848460405161195f93929190613556565b60405180910390a2505050565b611974612128565b5f8110156119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae9061374d565b60405180910390fd5b620151808111156119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f4906137b5565b60405180910390fd5b8060158190555050565b5f611a133384846124a4565b6001905092915050565b600d544210611bd8575f80600e5411611a3857600d54611a3c565b600e545b90505f600a548242611a4e91906132bb565b611a589190613258565b90505f8103611a68575050611bd8565b5f611a71611375565b90505f611a7c610b30565b90505f8183611a8b9190613288565b90505f600a546301e13380611aa09190613258565b90505f8183611aaf9190613258565b90505f6064670de0b6b3a76400008884601354611acc91906131ea565b611ad691906131ea565b611ae09190613258565b611aea9190613258565b90505f8103611b1f5786600a54611b0191906131ea565b88611b0c9190613288565b600e819055505050505050505050611bd8565b8060135f828254611b309190613288565b92505081905550601354601454611b479190613258565b601181905550601154600f54611b5d9190613258565b60108190555086600a54611b7191906131ea565b88611b7c9190613288565b600e819055507f82ec6dc57ebf74c563b660545554cb4bb01fc6e3e89020f8f47dd324e64eeaf48686848b8b60135487601154601054604051611bc7999897969594939291906137d3565b60405180910390a150505050505050505b565b5f80611be4611375565b90505f611bef610b30565b90505f8183611bfe9190613288565b90505f80600e5411611c1257600d54611c16565b600e545b905042811115611c2c575f945050505050611cbf565b5f600a548242611c3c91906132bb565b611c469190613258565b90505f8103611c5457600190505b5f600a546301e13380611c679190613258565b90505f8185611c769190613258565b90505f6064670de0b6b3a76400008584601054611c9391906131ea565b611c9d91906131ea565b611ca79190613258565b611cb19190613258565b905080985050505050505050505b90565b60145481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cf6612128565b600d544210611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d31906138a8565b60405180910390fd5b80600d819055507fd1c4f5d3748426e79e1bbf9eef6e637b3b173e57084ada1e37330d9a31e06f7581604051611d709190612ebf565b60405180910390a150565b5f80611d85611bda565b90505f611d9184611458565b90505f601054670de0b6b3a764000083611dab91906131ea565b611db59190613258565b90506064670de0b6b3a76400008285611dce91906131ea565b611dd89190613258565b611de29190613258565b9350505050919050565b60135481565b611dfa612128565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611e3d573d5f803e3d5ffd5b505050565b60085481565b5f60185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60155481565b611ed8612128565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90613910565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611f819291906134da565b6020604051808303815f875af1158015611f9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc1919061352b565b50505050565b600f5481565b611fd5612128565b80600a819055507fa0df1b641bcb350bfc38973452497c08c1314b4788866ea2c6eaab659573df248160405161200b9190612ebf565b60405180910390a150565b61201e612128565b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f60405160405180910390a250565b6120ac612128565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361211c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016121139190612f96565b60405180910390fd5b61212581612a67565b50565b612130612cec565b73ffffffffffffffffffffffffffffffffffffffff1661214e611580565b73ffffffffffffffffffffffffffffffffffffffff16146121ad57612171612cec565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016121a49190612f96565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122149061399e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613a2c565b60405180910390fd5b8060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123659190612ebf565b60405180910390a3505050565b5f8082116123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90613a94565b60405180910390fd5b5f5b670de0b6b3a7640000600a6123cc91906131ea565b83106123fc57600a836123df9190613258565b9250670de0b6b3a7640000816123f59190613288565b90506123b7565b5f5b60128160ff16101561249a57670de0b6b3a7640000848561241f91906131ea565b6124299190613258565b9350670de0b6b3a7640000600a61244091906131ea565b841061248f57600a846124539190613258565b93506001816124629190613ab2565b600261246e9190613c15565b670de0b6b3a76400006124819190613258565b8261248c9190613288565b91505b8060010190506123fe565b5080915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613ccf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257790613d5d565b60405180910390fd5b6011548161258e91906131ea565b60175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490613deb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061267357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6126b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a990613e79565b60405180910390fd5b6126ba611a1d565b5f612710825f6126ca91906131ea565b6126d49190613258565b90505f81836126e391906132bb565b90505f601154826126f491906131ea565b90505f6011548461270591906131ea565b905080826127139190613288565b60175f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461275e91906132bb565b925050819055508160175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127b19190613288565b925050819055505f811115612835578060175f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461282d9190613288565b925050819055505b8573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128929190612ebf565b60405180910390a350505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290890613f07565b60405180910390fd5b5f6011548261292091906131ea565b905080600f5f82825461293391906132bb565b925050819055508160105f82825461294b91906132bb565b925050819055508060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461299e91906132bb565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f4d667732637549615f3cd28023b13380094dd975c0ac7c1b26916a8b1363b7ec83836011546010546040516129f59493929190613623565b60405180910390a25f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a5a9190612ebf565b60405180910390a3505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90613f6f565b60405180910390fd5b5f60115482612ba591906131ea565b905080600f5f828254612bb89190613288565b925050819055508160105f828254612bd09190613288565b925050819055508060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612c239190613288565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f94c792774c59479f7bd68442f3af3691c02123a5aabee8b6f9116d8af8aa66698383601154601054604051612c7a9493929190613623565b60405180910390a28273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cdf9190612ebf565b60405180910390a3505050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d2082612cf7565b9050919050565b612d3081612d16565b8114612d3a575f80fd5b50565b5f81359050612d4b81612d27565b92915050565b5f60208284031215612d6657612d65612cf3565b5b5f612d7384828501612d3d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612dbe82612d7c565b612dc88185612d86565b9350612dd8818560208601612d96565b612de181612da4565b840191505092915050565b5f6020820190508181035f830152612e048184612db4565b905092915050565b5f819050919050565b612e1e81612e0c565b8114612e28575f80fd5b50565b5f81359050612e3981612e15565b92915050565b5f8060408385031215612e5557612e54612cf3565b5b5f612e6285828601612d3d565b9250506020612e7385828601612e2b565b9150509250929050565b5f8115159050919050565b612e9181612e7d565b82525050565b5f602082019050612eaa5f830184612e88565b92915050565b612eb981612e0c565b82525050565b5f602082019050612ed25f830184612eb0565b92915050565b5f805f60608486031215612eef57612eee612cf3565b5b5f612efc86828701612d3d565b9350506020612f0d86828701612d3d565b9250506040612f1e86828701612e2b565b9150509250925092565b5f60208284031215612f3d57612f3c612cf3565b5b5f612f4a84828501612e2b565b91505092915050565b5f60ff82169050919050565b612f6881612f53565b82525050565b5f602082019050612f815f830184612f5f565b92915050565b612f9081612d16565b82525050565b5f602082019050612fa95f830184612f87565b92915050565b5f805f8060808587031215612fc757612fc6612cf3565b5b5f612fd487828801612e2b565b9450506020612fe587828801612e2b565b9350506040612ff687828801612e2b565b925050606061300787828801612e2b565b91505092959194509250565b5f806040838503121561302957613028612cf3565b5b5f61303685828601612d3d565b925050602061304785828601612d3d565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061309557607f821691505b6020821081036130a8576130a7613051565b5b50919050565b5f815190506130bc81612e15565b92915050565b5f602082840312156130d7576130d6612cf3565b5b5f6130e4848285016130ae565b91505092915050565b7f4c502062616c616e6365207a65726f00000000000000000000000000000000005f82015250565b5f613121600f83612d86565b915061312c826130ed565b602082019050919050565b5f6020820190508181035f83015261314e81613115565b9050919050565b7f44796e616d69632041505220636f6e7374616e74207a65726f000000000000005f82015250565b5f613189601983612d86565b915061319482613155565b602082019050919050565b5f6020820190508181035f8301526131b68161317d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131f482612e0c565b91506131ff83612e0c565b925082820261320d81612e0c565b91508282048414831517613224576132236131bd565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61326282612e0c565b915061326d83612e0c565b92508261327d5761327c61322b565b5b828204905092915050565b5f61329282612e0c565b915061329d83612e0c565b92508282019050808211156132b5576132b46131bd565b5b92915050565b5f6132c582612e0c565b91506132d083612e0c565b92508282039050818111156132e8576132e76131bd565b5b92915050565b7f4261736520746f6b656e2063616e206f6e6c7920626520736574206f6e63652c5f8201527f20616e6420697320696d6d757461626c65206166746572776172647300000000602082015250565b5f613348603c83612d86565b9150613353826132ee565b604082019050919050565b5f6020820190508181035f8301526133758161333c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6133d6602883612d86565b91506133e18261337c565b604082019050919050565b5f6020820190508181035f830152613403816133ca565b9050919050565b7f5761726d757020706572696f64206e6f74206f766572000000000000000000005f82015250565b5f61343e601683612d86565b91506134498261340a565b602082019050919050565b5f6020820190508181035f83015261346b81613432565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6134a6601483612d86565b91506134b182613472565b602082019050919050565b5f6020820190508181035f8301526134d38161349a565b9050919050565b5f6040820190506134ed5f830185612f87565b6134fa6020830184612eb0565b9392505050565b61350a81612e7d565b8114613514575f80fd5b50565b5f8151905061352581613501565b92915050565b5f602082840312156135405761353f612cf3565b5b5f61354d84828501613517565b91505092915050565b5f6060820190506135695f830186612eb0565b6135766020830185612eb0565b6135836040830184612eb0565b949350505050565b5f61359582612e0c565b91506135a083612e0c565b9250826135b0576135af61322b565b5b828206905092915050565b7f4d696e2063617020686967686572207468616e206d61782063617000000000005f82015250565b5f6135ef601b83612d86565b91506135fa826135bb565b602082019050919050565b5f6020820190508181035f83015261361c816135e3565b9050919050565b5f6080820190506136365f830187612eb0565b6136436020830186612eb0565b6136506040830185612eb0565b61365d6060830184612eb0565b95945050505050565b5f6060820190506136795f830186612f87565b6136866020830185612f87565b6136936040830184612eb0565b949350505050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f6136cf600f83612d86565b91506136da8261369b565b602082019050919050565b5f6020820190508181035f8301526136fc816136c3565b9050919050565b7f5761726d757020706572696f6420746f6f206c6f7700000000000000000000005f82015250565b5f613737601583612d86565b915061374282613703565b602082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f5761726d757020706572696f6420746f6f2068696768000000000000000000005f82015250565b5f61379f601683612d86565b91506137aa8261376b565b602082019050919050565b5f6020820190508181035f8301526137cc81613793565b9050919050565b5f610120820190506137e75f83018c612eb0565b6137f4602083018b612eb0565b613801604083018a612eb0565b61380e6060830189612eb0565b61381b6080830188612eb0565b61382860a0830187612eb0565b61383560c0830186612eb0565b61384260e0830185612eb0565b613850610100830184612eb0565b9a9950505050505050505050565b7f5374616b696e6720616c726561647920737461727465640000000000000000005f82015250565b5f613892601783612d86565b915061389d8261385e565b602082019050919050565b5f6020820190508181035f8301526138bf81613886565b9050919050565b7f43616e6e6f74207769746864726177207374616b696e6720746f6b656e0000005f82015250565b5f6138fa601d83612d86565b9150613905826138c6565b602082019050919050565b5f6020820190508181035f830152613927816138ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613988602483612d86565b91506139938261392e565b604082019050919050565b5f6020820190508181035f8301526139b58161397c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a16602283612d86565b9150613a21826139bc565b604082019050919050565b5f6020820190508181035f830152613a4381613a0a565b9050919050565b7f4c6f67207a65726f0000000000000000000000000000000000000000000000005f82015250565b5f613a7e600883612d86565b9150613a8982613a4a565b602082019050919050565b5f6020820190508181035f830152613aab81613a72565b9050919050565b5f613abc82612f53565b9150613ac783612f53565b9250828201905060ff811115613ae057613adf6131bd565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115613b3b57808604811115613b1757613b166131bd565b5b6001851615613b265780820291505b8081029050613b3485613ae6565b9450613afb565b94509492505050565b5f82613b535760019050613c0e565b81613b60575f9050613c0e565b8160018114613b765760028114613b8057613baf565b6001915050613c0e565b60ff841115613b9257613b916131bd565b5b8360020a915084821115613ba957613ba86131bd565b5b50613c0e565b5060208310610133831016604e8410600b8410161715613be45782820a905083811115613bdf57613bde6131bd565b5b613c0e565b613bf18484846001613af2565b92509050818404811115613c0857613c076131bd565b5b81810290505b9392505050565b5f613c1f82612e0c565b9150613c2a83612f53565b9250613c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b44565b905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613cb9602583612d86565b9150613cc482613c5f565b604082019050919050565b5f6020820190508181035f830152613ce681613cad565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613d47602383612d86565b9150613d5282613ced565b604082019050919050565b5f6020820190508181035f830152613d7481613d3b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613dd5602683612d86565b9150613de082613d7b565b604082019050919050565b5f6020820190508181035f830152613e0281613dc9565b9050919050565b7f45524332303a207472616e7366657220746f207374616b696e6720636f6e74725f8201527f6163740000000000000000000000000000000000000000000000000000000000602082015250565b5f613e63602383612d86565b9150613e6e82613e09565b604082019050919050565b5f6020820190508181035f830152613e9081613e57565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613ef1602183612d86565b9150613efc82613e97565b604082019050919050565b5f6020820190508181035f830152613f1e81613ee5565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f613f59601f83612d86565b9150613f6482613f25565b602082019050919050565b5f6020820190508181035f830152613f8681613f4d565b905091905056fea2646970667358221220c2a4ebe1bd43a907b84eeceb39a04708d899ed8acac68989755632cb618020f664736f6c634300081a0033
Verified Source Code Full Match
Compiler: v0.8.26+commit.8a97fa7a
EVM: cancun
Optimization: No
GenesisStaking.sol 482 lines
// Website: https://genesisdao.io/
// X: https://x.com/0xGenesisDAO
// Discord: https://discord.gg/genesisdao
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// &
// (&&&&&&&&&&&&&&&&&&&&&&&&&&&*
// &&&&&&&&&&&&&&&&&&&&&@,,@@@@&&&&&&&&&&&
// &&&&&&&&&&&&&&&&&&&&&,,,,,,,,,*@@@&&&&&&&&&&&&&
// &&&&&&&&&&&&&&&&&&&&,,,,,,,,,,,@@@@@@@&&&&&&&&&&&&&&&
// &&&&&&&&&&&&&&&&&@,,,,,,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&
// &&&&&&&&&&&&&&@,,,,,,,,,,,*@@@@@@@@@@&&&&&&&&&@,,,,,#@@@@&&&&&&
// &&&&&&&&&&&&#,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&*,,,,,,,,,,,,@@@@&&&&&&
// &&&&&&&&&@..,,.,,,,,@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,,,,,,@@@@&&&&&&&
// #&&&&&&&&&&@..,,,,,%@@@@@@@@&&&&&&&&&@,,,,,,,,,,,,@@,,,,,,,,@@@@&&&&&&&&
// &&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&&..,,,,,,,,,,@@@@@@@@,,,,,,,@@@@&&&&&&&&&&
// &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@..,,,,,@@@@@@@@@@@@@,,,,,,,@@@@&&&&&&&&&&*
// &&&&&&&&&&&&&@..,,,,,&@@@@&&&&&&&&@@@@@@@@@@@@@@&&&&&&@,,,,,,,@@@@&&&&&&&&&&&
// &&&&&&&&&&&&&&@..,,,,@@@@@@&&&&&&&&&&&&@@@@@@&&&&&&&&&&@@,,,,,,@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&&@@@@@@@@//*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&&&@@@/**,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@@@@@@@@@&&&&&&&&&&&&&
// &&&&&&&&&&&&&&&@.....,.,,@@@@@@@@@@@@@@@@@@@@@@@@@@&&%@@@@@@/*,,@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&&@....,,,,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/**,,,,@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&&&&&&&&&&&&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&&@....,,,,@@@@&&&&&&&&&@,,,,,@@@@&&&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&&
// &&&&&&&&&&&&&@....,,,,@@@@&&&&&,,,,,,,,,,,,@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&&
// &&&&&&&&&&&&&@....,,,,@@@@,,,,,,,,,,,,,,@@@@@@@&&&&&&&@,,,,,,,@@@@&&&&&&&&&&*
// &&&&&&&&&&&&@....,,,,,,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&,,,,,,,,@@@@&&&&&&&&&&
// /&&&&&&&&&&@....,,,,,,,,,,,@@@@@@@@@@@@&&&&&&&&@,,,,,,,,,,,,@@@@&&&&&&&&
// &&&&&&&&&@@....,,,,,@@@@@@@@@@@@&&&&&&&&&,,,,,,,,,,,,,@@@@@@@@&&&&&&&
// &&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&
// &&&&&&&&&&@@@@@@@@&&&&&&&&&&@,,,,,,,,,,,,@@@@@@@@@@@&&&&&&&&&&&
// &&&&&&&&&&&&&&&&&&&&&&..,,,,,,,,,,(@@@@@@@@@@&&&&&&&&&&&&&&
// &&&&&&&&&&&&&&&&&@...,,,,,,@@@@@@@@@@&&&&&&&&&&&&&&&&
// &&&&&&&&&&&&&&@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&
// &&&&&&&&&&&&@@@@@@@@@&&&&&&&&&&&&&&&&&&
// *&&&&&&&&&&&&&&&&&&&&&&&&&&&
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "hardhat/console.sol";
interface IERC20MintableBurnable is IERC20 {
function mint(address account, uint256 amount) external;
function burn(uint256 amount) external;
}
contract GenesisAutoCompoundStaking is IERC20, Ownable {
uint256 private constant MAX_UINT256 = type(uint256).max;
uint256 private constant SCALE = 1e18;
uint256 private constant ONE_YEAR = 365 days;
uint256 private constant MAX_STAKE_TAX = 1500; // 15%
uint256 private constant MAX_UNSTAKE_TAX = 1500; // 15%
uint256 private constant PERCENTAGE_BASE = 10000; // 100%
string public name = "sGE";
string public symbol = "sGE";
uint8 public decimals = 18;
address public baseToken;
address public liquidityPool;
address public treasury;
uint256 public fixedAPR = 50 ether;
uint256 public dynamicAPRMinCap = 30 ether;
uint256 public dynamicAPRMaxCap = 70 ether;
uint256 public dynamicAPRConstant = 1 ether;
uint256 public rebaseInterval = 8 hours;
uint256 public stakeTax = 0;
uint256 public unstakeTax = 750;
uint256 public stakeStartTime;
uint256 public lastRebaseTime;
uint256 public totalGons;
uint256 public totalSupplyTokens;
uint256 public gonsPerFragment = 1e7;
uint256 public initialMaxSupply;
uint256 public maxSupply;
uint256 public maxGons;
uint256 public warmupPeriod;
bool private _baseTokenSet = false;
mapping(address => uint256) private _gonBalances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) public stakeTimes;
event Mint(address indexed wallet, uint256 amount, uint256 gonsAdded, uint256 gonsPerFragment, uint256 newTotalSupply);
event Burn(address indexed wallet, uint256 amount, uint256 gonsRemoved, uint256 gonsPerFragment, uint256 newTotalSupply);
event Stake(address indexed user, uint256 amount, uint256 taxAmount, uint256 mintedTokens);
event Unstake(address indexed user, uint256 amount, uint256 taxAmount, uint256 returnedTokens);
event Rebase(
uint256 fixedAPR,
uint256 dynamicAPR,
uint256 rebaseAPR,
uint256 lastRebaseTime,
uint256 rebaseCount,
uint256 maxSupply,
uint256 supplyDelta,
uint256 gonsPerFragment,
uint256 currentSupply
);
event BaseTokenSet(address indexed baseToken);
event LiquidityPoolSet(address indexed liquidityPool);
event APRParamsSet(uint256 fixedAPR, uint256 dynamicAPRMinCap, uint256 dynamicAPRMaxCap, uint256 dynamicAPRConstant);
event RebaseIntervalSet(uint256 rebaseInterval);
event StakeTaxSet(uint256 stakeTax);
event UnstakeTaxSet(uint256 unstakeTax);
event StakeStartTimeSet(uint256 stakeStartTime);
event TreasurySet(address indexed treasury);
constructor(
address _baseToken,
address _liquidityPool,
address _treasury,
uint256 _stakeStartTime
) Ownable(msg.sender) {
baseToken = _baseToken;
liquidityPool = _liquidityPool;
treasury = _treasury;
stakeStartTime = _stakeStartTime;
maxSupply = IERC20MintableBurnable(baseToken).totalSupply() + 1 ether;
initialMaxSupply = maxSupply;
maxGons = MAX_UINT256 - (MAX_UINT256 % maxSupply);
gonsPerFragment = maxGons / maxSupply;
_mint(address(this), 1 ether);
warmupPeriod = 60;
emit BaseTokenSet(_baseToken);
emit LiquidityPoolSet(_liquidityPool);
emit TreasurySet(_treasury);
emit StakeStartTimeSet(_stakeStartTime);
}
function setBaseToken(address _baseToken) external onlyOwner {
require(_baseTokenSet == false, "Base token can only be set once, and is immutable afterwards");
baseToken = _baseToken;
emit BaseTokenSet(_baseToken);
}
function setLiquidityPool(address _liquidityPool) external onlyOwner {
liquidityPool = _liquidityPool;
emit LiquidityPoolSet(_liquidityPool);
}
function setAprParameters(
uint256 _fixedAPR,
uint256 _dynamicAPRMinCap,
uint256 _dynamicAPRMaxCap,
uint256 _dynamicAPRConstant
) external onlyOwner {
require(_dynamicAPRMinCap <= _dynamicAPRMaxCap, "Min cap higher than max cap");
fixedAPR = _fixedAPR;
dynamicAPRMinCap = _dynamicAPRMinCap;
dynamicAPRMaxCap = _dynamicAPRMaxCap;
dynamicAPRConstant = _dynamicAPRConstant;
emit APRParamsSet(_fixedAPR, _dynamicAPRMinCap, _dynamicAPRMaxCap, _dynamicAPRConstant);
}
function setRebaseInterval(uint256 _rebaseInterval) external onlyOwner {
rebaseInterval = _rebaseInterval;
emit RebaseIntervalSet(_rebaseInterval);
}
function setTreasury(address _treasury) external onlyOwner {
treasury = _treasury;
emit TreasurySet(_treasury);
}
function setStakeStartTime(uint256 _stakeStartTime) external onlyOwner {
require(block.timestamp < stakeStartTime, "Staking already started");
stakeStartTime = _stakeStartTime;
emit StakeStartTimeSet(_stakeStartTime);
}
function setWarmupPeriod(uint256 _warmupPeriod) external onlyOwner {
require(_warmupPeriod >= 0, "Warmup period too low");
require(_warmupPeriod <= 1 days, "Warmup period too high");
warmupPeriod = _warmupPeriod;
}
function _mint(address account, uint256 amount) internal {
require(account != address(0), "ERC20: mint to the zero address");
uint256 gonsToAdd = amount * gonsPerFragment;
totalGons += gonsToAdd;
totalSupplyTokens += amount;
_gonBalances[account] += gonsToAdd;
emit Mint(account, amount, gonsToAdd, gonsPerFragment, totalSupplyTokens);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal {
require(account != address(0), "ERC20: burn from the zero address");
uint256 gonsToRemove = amount * gonsPerFragment;
totalGons -= gonsToRemove;
totalSupplyTokens -= amount;
_gonBalances[account] -= gonsToRemove;
emit Burn(account, amount, gonsToRemove, gonsPerFragment, totalSupplyTokens);
emit Transfer(account, address(0), amount);
}
function rebase() public {
if (block.timestamp < stakeStartTime) return;
uint256 timeToUse = lastRebaseTime > 0 ? lastRebaseTime : stakeStartTime;
uint256 rebaseCount = (block.timestamp - timeToUse) / rebaseInterval;
if (rebaseCount == 0) return;
uint256 fixedApr = getFixedAPR();
uint256 dynamicApr = getDynamicAPR();
uint256 finalApr = fixedApr + dynamicApr;
uint256 intervalsPerYear = ONE_YEAR / rebaseInterval;
uint256 intervalAPR = finalApr / intervalsPerYear;
uint256 supplyDelta = (maxSupply * intervalAPR * rebaseCount) / SCALE / 100;
if (supplyDelta == 0) {
lastRebaseTime = timeToUse + rebaseInterval * rebaseCount;
return;
}
maxSupply += supplyDelta;
gonsPerFragment = maxGons / maxSupply;
totalSupplyTokens = totalGons / gonsPerFragment;
lastRebaseTime = timeToUse + rebaseInterval * rebaseCount;
emit Rebase(
fixedApr,
dynamicApr,
intervalAPR,
timeToUse,
rebaseCount,
maxSupply,
supplyDelta,
gonsPerFragment,
totalSupplyTokens
);
}
function stake(uint256 amount) external {
rebase();
require(IERC20(baseToken).transferFrom(msg.sender, address(this), amount), "Transfer failed");
uint256 taxAmount = (amount * stakeTax) / PERCENTAGE_BASE;
uint256 netAmount = amount - taxAmount;
IERC20MintableBurnable(baseToken).burn(netAmount);
if (taxAmount > 0) {
IERC20(baseToken).transfer(treasury, taxAmount);
}
_mint(msg.sender, netAmount);
if (warmupPeriod > 0) {
stakeTimes[msg.sender] = block.timestamp;
}
emit Stake(msg.sender, amount, taxAmount, netAmount);
}
function unstake(uint256 amount) external {
require(block.timestamp - stakeTimes[msg.sender] >= warmupPeriod, "Warmup period not over");
rebase();
uint256 gonsToRemove = amount * gonsPerFragment;
require(_gonBalances[msg.sender] >= gonsToRemove, "Insufficient balance");
_burn(msg.sender, amount);
IERC20MintableBurnable(baseToken).mint(address(this), amount);
uint256 taxAmount = (amount * unstakeTax) / PERCENTAGE_BASE;
uint256 netAmount = amount - taxAmount;
IERC20(baseToken).transfer(msg.sender, netAmount);
if (taxAmount > 0) {
IERC20(baseToken).transfer(treasury, taxAmount);
}
emit Unstake(msg.sender, amount, taxAmount, netAmount);
}
function _transfer(address sender, address recipient, uint256 amount) internal {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
require(_gonBalances[sender] >= amount * gonsPerFragment, "ERC20: transfer amount exceeds balance");
require(sender == address(0) || recipient != address(this), "ERC20: transfer to staking contract");
rebase();
uint256 taxAmount = ((0 + 0) * amount) / PERCENTAGE_BASE;
uint256 netAmount = amount - taxAmount;
uint256 gonsToTransfer = netAmount * gonsPerFragment;
uint256 gonsTaxAmount = taxAmount * gonsPerFragment;
_gonBalances[sender] -= (gonsToTransfer + gonsTaxAmount);
_gonBalances[recipient] += gonsToTransfer;
if (gonsTaxAmount > 0) {
_gonBalances[treasury] += gonsTaxAmount;
}
emit Transfer(sender, recipient, netAmount);
}
function getFixedAPR() public view returns (uint256) {
return fixedAPR;
}
function getDynamicAPR() public view returns (uint256) {
uint256 totalStaked = totalSupplyTokens;
uint256 lpBalance = IERC20(baseToken).balanceOf(liquidityPool);
if (lpBalance <= 0) {
revert("LP balance zero");
}
if (dynamicAPRConstant <= 0) {
revert("Dynamic APR constant zero");
}
uint256 ratio = (totalStaked * SCALE) / lpBalance;
if (ratio > 10 * SCALE) {
ratio = 10 * SCALE;
}
uint256 scaledRatio = (ratio * dynamicAPRConstant) / SCALE;
uint256 logInput = SCALE + scaledRatio;
uint256 logValue = log10(logInput);
uint256 apyValue = dynamicAPRMaxCap -
((dynamicAPRMaxCap - dynamicAPRMinCap) * logValue) /
log10(dynamicAPRConstant * 10);
if (apyValue < dynamicAPRMinCap) {
apyValue = dynamicAPRMinCap;
}
return apyValue;
}
function getFinalAPR() public view returns (uint256) {
return getFixedAPR() + getDynamicAPR();
}
function log10(uint256 x) internal view returns (uint256) {
if (x <= 0) {
revert("Log zero");
}
uint256 result = 0;
while (x >= 10 * SCALE) {
x /= 10;
result += SCALE;
}
for (uint8 i = 0; i < 18; ++i) {
x = (x * x) / SCALE;
if (x >= 10 * SCALE) {
x /= 10;
result += SCALE / (2 ** (i + 1));
}
}
return result;
}
function balanceOf(address account) public view override returns (uint256) {
return _gonBalances[account] / gonsPerFragment;
}
function totalSupply() public view override returns (uint256) {
return totalSupplyTokens;
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
uint256 currentAllowance = _allowances[sender][msg.sender];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, currentAllowance - amount);
return true;
}
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function timeTillNextRebase() public view returns (uint256) {
if (block.timestamp < stakeStartTime) {
return stakeStartTime - block.timestamp;
}
return rebaseInterval - ((block.timestamp - stakeStartTime) % rebaseInterval);
}
function totalTokensAtNextRebase() public view returns (uint256) {
uint256 fixedApr = getFixedAPR();
uint256 dynamicApr = getDynamicAPR();
uint256 finalApr = fixedApr + dynamicApr;
uint256 timeToUse = lastRebaseTime > 0 ? lastRebaseTime : stakeStartTime;
if (timeToUse > block.timestamp) return 0;
uint256 rebaseCount = (block.timestamp - timeToUse) / rebaseInterval;
if (rebaseCount == 0) rebaseCount = 1;
uint256 intervalsPerYear = ONE_YEAR / rebaseInterval;
uint256 intervalAPR = finalApr / intervalsPerYear;
uint256 supplyDelta = (totalSupplyTokens * intervalAPR * rebaseCount) / SCALE / 100;
return supplyDelta;
}
function tokensForAddressAtNextRebase(address account) public view returns (uint256) {
uint256 supplyDelta = totalTokensAtNextRebase();
uint256 userBalance = balanceOf(account);
uint256 userShare = (userBalance * SCALE) / totalSupplyTokens;
return (supplyDelta * userShare) / SCALE / 100;
}
function tokensDeductedForUnstaking(uint256 amount) public view returns (uint256) {
uint256 taxAmount = (amount * unstakeTax) / PERCENTAGE_BASE;
return taxAmount;
}
function tokensDeductedForStaking(uint256 amount) public view returns (uint256) {
uint256 taxAmount = (amount * stakeTax) / PERCENTAGE_BASE;
return taxAmount;
}
function index() public view returns (uint256) {
return balanceOf(address(this));
}
function totalTokensRewarded() public view returns (uint256) {
return maxSupply - initialMaxSupply;
}
function emergencyWithdraw(address token, address to, uint256 amount) external onlyOwner {
require(token != address(this), "Cannot withdraw staking token");
IERC20(token).transfer(to, amount);
}
function emergencyEthWithdraw(address to, uint256 amount) external onlyOwner {
payable(to).transfer(amount);
}
}
console.sol 1552 lines
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS =
0x000000000000000000636F6e736F6c652e6c6f67;
function _sendLogPayloadImplementation(bytes memory payload) internal view {
address consoleAddress = CONSOLE_ADDRESS;
/// @solidity memory-safe-assembly
assembly {
pop(
staticcall(
gas(),
consoleAddress,
add(payload, 32),
mload(payload),
0,
0
)
)
}
}
function _castToPure(
function(bytes memory) internal view fnIn
) internal pure returns (function(bytes memory) pure fnOut) {
assembly {
fnOut := fnIn
}
}
function _sendLogPayload(bytes memory payload) internal pure {
_castToPure(_sendLogPayloadImplementation)(payload);
}
function log() internal pure {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
}
function logUint(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function logString(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logBytes1(bytes1 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function log(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint256 p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
}
function log(uint256 p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
}
function log(string memory p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
}
function log(bool p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
}
function log(address p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
}
function log(uint256 p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
}
function log(uint256 p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
}
function log(uint256 p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
}
function log(uint256 p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
}
function log(uint256 p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
}
function log(uint256 p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
}
function log(uint256 p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
}
function log(uint256 p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
}
function log(uint256 p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
}
function log(string memory p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
}
function log(string memory p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
}
function log(string memory p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
}
function log(string memory p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
}
function log(string memory p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
}
function log(string memory p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
}
function log(string memory p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
}
function log(string memory p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
}
function log(string memory p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
}
function log(string memory p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
}
function log(string memory p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
}
function log(bool p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
}
function log(bool p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
}
function log(bool p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
}
function log(bool p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
}
function log(bool p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
}
function log(bool p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
}
function log(bool p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
}
function log(bool p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
}
function log(bool p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
}
function log(bool p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
}
function log(bool p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
}
function log(bool p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
}
function log(bool p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
}
function log(bool p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
}
function log(bool p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
}
function log(address p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
}
function log(address p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
}
function log(address p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
}
function log(address p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
}
function log(address p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
}
function log(address p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
}
function log(address p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
}
function log(address p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
}
function log(address p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
}
function log(address p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
}
function log(address p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
}
function log(address p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
}
function log(address p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
}
function log(address p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
}
function log(address p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, ...
// [truncated — 69001 bytes total]
IERC20.sol 79 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
Ownable.sol 100 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
baseToken 0xc55dae63 → address
decimals 0x313ce567 → uint8
dynamicAPRConstant 0x4a7c4d18 → uint256
dynamicAPRMaxCap 0xd9565b03 → uint256
dynamicAPRMinCap 0x51d4a580 → uint256
fixedAPR 0x118ab4e1 → uint256
getDynamicAPR 0x0f336d48 → uint256
getFinalAPR 0x4befa981 → uint256
getFixedAPR 0x45885bfe → uint256
gonsPerFragment 0x7ed8f653 → uint256
index 0x2986c0e5 → uint256
initialMaxSupply 0x30643c41 → uint256
lastRebaseTime 0x1924063e → uint256
liquidityPool 0x665a11ca → address
maxGons 0xc4968c9a → uint256
maxSupply 0xd5abeb01 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
rebaseInterval 0x89edeb74 → uint256
stakeStartTime 0x7419f190 → uint256
stakeTax 0x09bc773f → uint256
stakeTimes 0x1ad25ffb → uint256
symbol 0x95d89b41 → string
timeTillNextRebase 0x529bed7f → uint256
tokensDeductedForStaking 0xa4168bcf → uint256
tokensDeductedForUnstaking 0x4508a6cc → uint256
tokensForAddressAtNextRebase 0xcca1ef6e → uint256
totalGons 0xecdd98be → uint256
totalSupply 0x18160ddd → uint256
totalSupplyTokens 0x2e187a68 → uint256
totalTokensAtNextRebase 0xbe8edf5c → uint256
totalTokensRewarded 0x663dcdbc → uint256
treasury 0x61d027b3 → address
unstakeTax 0x83e373b0 → uint256
warmupPeriod 0xdeac361a → uint256
Write Contract 17 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
emergencyEthWithdraw 0xd5e1fc1f
address to
uint256 amount
emergencyWithdraw 0xe63ea408
address token
address to
uint256 amount
rebase 0xaf14052c
No parameters
renounceOwnership 0x715018a6
No parameters
setAprParameters 0x8bd1d033
uint256 _fixedAPR
uint256 _dynamicAPRMinCap
uint256 _dynamicAPRMaxCap
uint256 _dynamicAPRConstant
setBaseToken 0x16bb6c13
address _baseToken
setLiquidityPool 0x01877020
address _liquidityPool
setRebaseInterval 0xef037fb9
uint256 _rebaseInterval
setStakeStartTime 0xcc1b63d5
uint256 _stakeStartTime
setTreasury 0xf0f44260
address _treasury
setWarmupPeriod 0xa85667c5
uint256 _warmupPeriod
stake 0xa694fc3a
uint256 amount
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
unstake 0x2e17de78
uint256 amount
Recent Transactions
No transactions found for this address