From 636edbf49b78b2b3f36e207d702b1baeea9b290b Mon Sep 17 00:00:00 2001 From: Logan Nguyen Date: Wed, 6 Mar 2024 09:44:17 -0500 Subject: [PATCH 1/4] feat: added feeAmount to create fungible and non-fungible with fee method Signed-off-by: Logan Nguyen --- .../TokenCreateCustomContract.json | 14 ++++++++++++-- .../examples/token-create/TokenCreateCustom.sol | 6 ++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/artifacts/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol/TokenCreateCustomContract.json b/artifacts/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol/TokenCreateCustomContract.json index dbe074e2b..42ec35d65 100644 --- a/artifacts/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol/TokenCreateCustomContract.json +++ b/artifacts/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol/TokenCreateCustomContract.json @@ -274,6 +274,11 @@ "name": "decimals", "type": "int32" }, + { + "internalType": "int64", + "name": "feeAmount", + "type": "int64" + }, { "components": [ { @@ -433,6 +438,11 @@ "name": "maxSupply", "type": "int64" }, + { + "internalType": "int64", + "name": "feeAmount", + "type": "int64" + }, { "components": [ { @@ -732,8 +742,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50600160208181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb499190915560027fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5560047fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f5560087f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b5560107fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643557fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c55600660005260407f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a55612498806101276000396000f3fe6080604052600436106100d25760003560e01c8063618dc65e1161007f578063c827bd3211610059578063c827bd32146101f9578063de84a77914610228578063f4a01e5b14610248578063fec394da1461026857600080fd5b8063618dc65e146101985780639b23d3d9146101c6578063a8c40459146101e657600080fd5b806329fc46e6116100b057806329fc46e61461015d578063424f165e14610172578063566300c61461018557600080fd5b80630fd2601e146100d7578063118741e71461010f57806315dacbea1461013d575b600080fd5b3480156100e357600080fd5b506100f76100f23660046113db565b610288565b60405160079190910b81526020015b60405180910390f35b34801561011b57600080fd5b5061012f61012a3660046114cb565b6102e5565b604051908152602001610106565b34801561014957600080fd5b506100f761015836600461157f565b610339565b61017061016b3660046117e9565b61042d565b005b6101706101803660046118ea565b610507565b6101706101933660046119b7565b6105db565b3480156101a457600080fd5b506101b86101b3366004611a84565b61085b565b604051610106929190611b24565b3480156101d257600080fd5b506100f76101e136600461157f565b610979565b6101706101f4366004611b45565b6109be565b34801561020557600080fd5b50610219610214366004611ca4565b610baa565b60405161010693929190611d58565b34801561023457600080fd5b50610219610243366004611d83565b610c44565b34801561025457600080fd5b5061012f6102633660046113db565b610cde565b34801561027457600080fd5b50610219610283366004611ca4565b610cea565b60006102948383610d0d565b604051600782900b81529091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a1600781900b6016146102df57600080fd5b92915050565b60006102f18383610df0565b90507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa8160405161032491815260200190565b60405180910390a1601681146102df57600080fd5b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790630aed65f560e11b9060a4015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103b89190611de5565b6000604051808303816000865af19150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b50915091508161040b57601561041f565b8080602001905181019061041f9190611e01565b60030b979650505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528f81529081018e9052948501529083018a905260016080840152600788900b60a084015285151560c084015260e083018490526101008301829052909190806104aa838b8a610e1c565b9092509050601682146104bc57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528c81529081018b90529485015290830187905260016080840152600786900b60a084015260c0830181905260e0830184905261010083018290529091908061058183610f44565b90925090506016821461059357600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050565b604080516060808201835260008083526001600160a01b038d166020808501829052627a1200858701528551610120810187528d81529081018c905280860191909152918201899052600160808301819052600788900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816106645750506040805160a081018252600181526001600160a01b038e811660208301526000928201839052606082018390528f1660808201528251929350918391906106e7576106e7611e25565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816107095790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b8152602001601e60070b81526020016000151581526020018e6001600160a01b0316815250816000815181106107a9576107a9611e25565b60200260200101819052506000806107c4858b8a8787611054565b915091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa826040516107f991815260200190565b60405180910390a16016821461080e57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a1505050505050505050505050505050565b600060606000806101676001600160a01b031663618dc65e60e01b8787604051602401610889929190611e3b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516108c79190611de5565b6000604051808303816000865af19150503d8060008114610904576040519150601f19603f3d011682016040523d82523d6000602084013e610909565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc828260405161093f929190611e5d565b60405180910390a18161096357601560405180602001604052806000815250610967565b6016815b60039190910b97909650945050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790639b23d3d960e01b9060a40161037a565b604080516060808201835260008083526001600160a01b038b166020808501829052627a1200858701528551610120810187528b81529081018a905280860191909152918201879052600160808301819052600787900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181610a475750506040805160a081018252600181526001600160a01b038c811660208301526000928201839052606082018390528d166080820152825192935091839190610aca57610aca611e25565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a08201528252600019909201910181610aec5790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b81526020018b6001600160a01b031681526020016000151581526020018c6001600160a01b031681525081600081518110610b9157610b91611e25565b60200260200101819052506000806104aa858585611182565b6000806060610bba878686610c44565b809350819450829550505050610bec87308884600081518110610bdf57610bdf611e25565b60200260200101516111ef565b50604080516001600160a01b03898116825288166020820152600787900b8183015290517f215c8eec9aa8fa57cdc8525400a046bf00ff93b20cc529980e01c1ef114fc2289181900360600190a19450945094915050565b6000806060610c54868686611237565b60405183815292955090935091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a160168314610c9c57600080fd5b7ffc6b20023c4bac8ff1c48c1693e0cea5cd3c2163e9c2da41c58f17dd6d9f163d8282604051610ccd929190611e78565b60405180910390a193509350939050565b60006102f18383611335565b6000806060610cfa878686610c44565b91945092509050610bec8730888861136b565b6040516001600160a01b038381166024830152821660448201526000908190819061016790638f8d7f9960e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610d7d9190611de5565b6000604051808303816000865af19150503d8060008114610dba576040519150601f19603f3d011682016040523d82523d6000602084013e610dbf565b606091505b509150915081610dd0576015610de4565b80806020019051810190610de49190611e01565b60030b95945050505050565b60008060006101676001600160a01b0316632e63879b60e01b8686604051602401610d3f929190611e94565b600080848061010001516000015160070b6000148015610e4657506101008101516040015160070b155b15610e5c576101008101516276a7006040909101525b6000806101676001600160a01b031634630fb65bf360e01b8a8a8a604051602401610e89939291906120ba565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ec79190611de5565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b509150915081610f1c5760156000610f30565b80806020019051810190610f3091906120e9565b60039190910b999098509650505050505050565b600080828061010001516000015160070b6000148015610f6e57506101008101516040015160070b155b15610f84576101008101516276a7006040909101525b6000806101676001600160a01b03163463ea83f29360e01b88604051602401610fad9190612118565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610feb9190611de5565b60006040518083038185875af1925050503d8060008114611028576040519150601f19603f3d011682016040523d82523d6000602084013e61102d565b606091505b5091509150816110405760156000610967565b8080602001905181019061096791906120e9565b600080868061010001516000015160070b600014801561107e57506101008101516040015160070b155b15611094576101008101516276a7006040909101525b6000806101676001600160a01b031634632af0c59a60e01b8c8c8c8c8c6040516024016110c5959493929190612199565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516111039190611de5565b60006040518083038185875af1925050503d8060008114611140576040519150601f19603f3d011682016040523d82523d6000602084013e611145565b606091505b509150915081611158576015600061116c565b8080602001905181019061116c91906120e9565b60039190910b9b909a5098505050505050505050565b600080848061010001516000015160070b60001480156111ac57506101008101516040015160070b155b156111c2576101008101516276a7006040909101525b6000806101676001600160a01b03163463abb54eb560e01b8a8a8a604051602401610e8993929190612266565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201526000908190819061016790635cfc901160e01b9060a40161037a565b60008060606000806101676001600160a01b031663e0f4059a60e01b8989896040516024016112689392919061231f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112a69190611de5565b6000604051808303816000865af19150503d80600081146112e3576040519150601f19603f3d011682016040523d82523d6000602084013e6112e8565b606091505b50915091508161130b57604080516000808252602082019092526015919061131f565b8080602001905181019061131f919061239e565b60039290920b9a90995090975095505050505050565b6040516001600160a01b03838116602483015282166044820152600090819081906101679063248a35ef60e11b90606401610d3f565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b6084820152600090819081906101679063eca3691760e01b9060a40161037a565b6001600160a01b03811681146113c857600080fd5b50565b80356113d6816113b3565b919050565b600080604083850312156113ee57600080fd5b82356113f9816113b3565b91506020830135611409816113b3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561144d5761144d611414565b60405290565b60405160a0810167ffffffffffffffff8111828210171561144d5761144d611414565b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611414565b604052919050565b600067ffffffffffffffff8211156114c1576114c1611414565b5060051b60200190565b600080604083850312156114de57600080fd5b82356114e9816113b3565b915060208381013567ffffffffffffffff81111561150657600080fd5b8401601f8101861361151757600080fd5b803561152a611525826114a7565b611476565b81815260059190911b8201830190838101908883111561154957600080fd5b928401925b82841015611570578335611561816113b3565b8252928401929084019061154e565b80955050505050509250929050565b6000806000806080858703121561159557600080fd5b84356115a0816113b3565b935060208501356115b0816113b3565b925060408501356115c0816113b3565b9396929550929360600135925050565b600082601f8301126115e157600080fd5b813567ffffffffffffffff8111156115fb576115fb611414565b61160e601f8201601f1916602001611476565b81815284602083860101111561162357600080fd5b816020850160208301376000918101602001919091529392505050565b8060070b81146113c857600080fd5b80356113d681611640565b8060030b81146113c857600080fd5b80356113d68161165a565b803580151581146113d657600080fd5b600082601f83011261169557600080fd5b813560206116a5611525836114a7565b82815260059290921b840181019181810190868411156116c457600080fd5b8286015b848110156117de57803567ffffffffffffffff808211156116e857600080fd5b908801906040601f19838c03810182131561170257600080fd5b61170a61142a565b888501358152828501358481111561172157600080fd5b949094019360a0858e03830112156117395760008081fd5b611741611453565b915061174e898601611674565b82528285013561175d816113b3565b828a0152606085810135858111156117755760008081fd5b6117838f8c838a01016115d0565b858501525060809350838601358581111561179e5760008081fd5b6117ac8f8c838a01016115d0565b82850152505060a085013594506117c2856113b3565b91810193909352808701929092525083529183019183016116c8565b509695505050505050565b60008060008060008060008060006101208a8c03121561180857600080fd5b893567ffffffffffffffff8082111561182057600080fd5b61182c8d838e016115d0565b9a5060208c013591508082111561184257600080fd5b61184e8d838e016115d0565b995060408c013591508082111561186457600080fd5b6118708d838e016115d0565b985061187e60608d0161164f565b975061188c60808d0161164f565b965061189a60a08d01611669565b95506118a860c08d01611674565b94506118b660e08d016113cb565b93506101008c01359150808211156118cd57600080fd5b506118da8c828d01611684565b9150509295985092959850929598565b60008060008060008060c0878903121561190357600080fd5b863567ffffffffffffffff8082111561191b57600080fd5b6119278a838b016115d0565b9750602089013591508082111561193d57600080fd5b6119498a838b016115d0565b9650604089013591508082111561195f57600080fd5b61196b8a838b016115d0565b955061197960608a0161164f565b945061198760808a016113cb565b935060a089013591508082111561199d57600080fd5b506119aa89828a01611684565b9150509295509295509295565b60008060008060008060008060006101208a8c0312156119d657600080fd5b6119df8a6113cb565b98506119ed60208b016113cb565b975060408a013567ffffffffffffffff80821115611a0a57600080fd5b611a168d838e016115d0565b985060608c0135915080821115611a2c57600080fd5b611a388d838e016115d0565b975060808c0135915080821115611a4e57600080fd5b611a5a8d838e016115d0565b9650611a6860a08d0161164f565b9550611a7660c08d0161164f565b94506118b660e08d01611669565b60008060408385031215611a9757600080fd5b8235611aa2816113b3565b9150602083013567ffffffffffffffff811115611abe57600080fd5b611aca858286016115d0565b9150509250929050565b60005b83811015611aef578181015183820152602001611ad7565b50506000910152565b60008151808452611b10816020860160208601611ad4565b601f01601f19169290920160200192915050565b828152604060208201526000611b3d6040830184611af8565b949350505050565b600080600080600080600060e0888a031215611b6057600080fd5b611b69886113cb565b9650611b77602089016113cb565b9550604088013567ffffffffffffffff80821115611b9457600080fd5b611ba08b838c016115d0565b965060608a0135915080821115611bb657600080fd5b611bc28b838c016115d0565b955060808a0135915080821115611bd857600080fd5b611be48b838c016115d0565b9450611bf260a08b0161164f565b935060c08a0135915080821115611c0857600080fd5b50611c158a828b01611684565b91505092959891949750929550565b600082601f830112611c3557600080fd5b81356020611c45611525836114a7565b82815260059290921b84018101918181019086841115611c6457600080fd5b8286015b848110156117de57803567ffffffffffffffff811115611c885760008081fd5b611c968986838b01016115d0565b845250918301918301611c68565b60008060008060808587031215611cba57600080fd5b8435611cc5816113b3565b93506020850135611cd5816113b3565b92506040850135611ce581611640565b9150606085013567ffffffffffffffff811115611d0157600080fd5b611d0d87828801611c24565b91505092959194509250565b60008151808452602080850194506020840160005b83811015611d4d57815160070b87529582019590820190600101611d2e565b509495945050505050565b8381528260070b6020820152606060408201526000611d7a6060830184611d19565b95945050505050565b600080600060608486031215611d9857600080fd5b8335611da3816113b3565b92506020840135611db381611640565b9150604084013567ffffffffffffffff811115611dcf57600080fd5b611ddb86828701611c24565b9150509250925092565b60008251611df7818460208701611ad4565b9190910192915050565b600060208284031215611e1357600080fd5b8151611e1e8161165a565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0383168152604060208201526000611b3d6040830184611af8565b8215158152604060208201526000611b3d6040830184611af8565b8260070b8152604060208201526000611b3d6040830184611d19565b6000604082016001600160a01b03808616845260206040602086015282865180855260608701915060208801945060005b81811015611ee3578551851683529483019491830191600101611ec5565b509098975050505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015611fab57601f198684030189528151604081518552858201519150808686015281511515818601528582015160606001600160a01b038083168289015283850151935060a09250608083818a0152611f6d60e08a0186611af8565b92860151898403603f1901858b0152929450611f898584611af8565b9501511660c09790970196909652505098840198925090830190600101611f0e565b5090979650505050505050565b60006101608251818552611fce82860182611af8565b91505060208301518482036020860152611fe88282611af8565b915050604083015161200560408601826001600160a01b03169052565b506060830151848203606086015261201d8282611af8565b9150506080830151612033608086018215159052565b5060a083015161204860a086018260070b9052565b5060c083015161205c60c086018215159052565b5060e083015184820360e08601526120748282611ef1565b915050610100808401516120b082870182805160070b82526001600160a01b036020820151166020830152604081015160070b60408301525050565b5090949350505050565b6060815260006120cd6060830186611fb8565b90508360070b60208301528260030b6040830152949350505050565b600080604083850312156120fc57600080fd5b82516121078161165a565b6020840151909250611409816113b3565b602081526000611e1e6020830184611fb8565b60008151808452602080850194506020840160005b83811015611d4d578151805160070b8852838101516001600160a01b03908116858a01526040808301511515908a01526060808301511515908a0152608091820151169088015260a09096019590820190600101612140565b600060a08083526121ad60a0840189611fb8565b602060078960070b8287015260408960030b6040880152606087850360608901526121d8858b61212b565b9450608088860360808a0152858a518088528688019150868c01975060005b818110156122515788518051880b845288810151880b8985015286810151880b8785015285810151880b86850152848101511515858501528a01516001600160a01b03168a8401529787019760c0909201916001016121f7565b50909f9e505050505050505050505050505050565b6000606080835261227a6060840187611fb8565b60208482038186015261228d828861212b565b9150604085830360408701528287518085528385019150838901945060005b8181101561230f5785518051600790810b855286820151810b8786015285820151900b85850152878101516001600160a01b039081168986015260808083015115159086015260a09182015116908401529484019460c0909201916001016122ac565b50909a9950505050505050505050565b6000606082016001600160a01b038616835260208560070b60208501526060604085015281855180845260808601915060808160051b87010193506020870160005b8281101561238f57607f1988870301845261237d868351611af8565b95509284019290840190600101612361565b50939998505050505050505050565b6000806000606084860312156123b357600080fd5b83516123be8161165a565b809350506020808501516123d181611640565b604086015190935067ffffffffffffffff8111156123ee57600080fd5b8501601f810187136123ff57600080fd5b805161240d611525826114a7565b81815260059190911b8201830190838101908983111561242c57600080fd5b928401925b8284101561245357835161244481611640565b82529284019290840190612431565b8095505050505050925092509256fea2646970667358221220b8296f48a775ff02aa340b241d086b06f9d71770188c6e8a5480fa6e6dec1c6d64736f6c63430008170033", - "deployedBytecode": "0x6080604052600436106100d25760003560e01c8063618dc65e1161007f578063c827bd3211610059578063c827bd32146101f9578063de84a77914610228578063f4a01e5b14610248578063fec394da1461026857600080fd5b8063618dc65e146101985780639b23d3d9146101c6578063a8c40459146101e657600080fd5b806329fc46e6116100b057806329fc46e61461015d578063424f165e14610172578063566300c61461018557600080fd5b80630fd2601e146100d7578063118741e71461010f57806315dacbea1461013d575b600080fd5b3480156100e357600080fd5b506100f76100f23660046113db565b610288565b60405160079190910b81526020015b60405180910390f35b34801561011b57600080fd5b5061012f61012a3660046114cb565b6102e5565b604051908152602001610106565b34801561014957600080fd5b506100f761015836600461157f565b610339565b61017061016b3660046117e9565b61042d565b005b6101706101803660046118ea565b610507565b6101706101933660046119b7565b6105db565b3480156101a457600080fd5b506101b86101b3366004611a84565b61085b565b604051610106929190611b24565b3480156101d257600080fd5b506100f76101e136600461157f565b610979565b6101706101f4366004611b45565b6109be565b34801561020557600080fd5b50610219610214366004611ca4565b610baa565b60405161010693929190611d58565b34801561023457600080fd5b50610219610243366004611d83565b610c44565b34801561025457600080fd5b5061012f6102633660046113db565b610cde565b34801561027457600080fd5b50610219610283366004611ca4565b610cea565b60006102948383610d0d565b604051600782900b81529091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a1600781900b6016146102df57600080fd5b92915050565b60006102f18383610df0565b90507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa8160405161032491815260200190565b60405180910390a1601681146102df57600080fd5b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790630aed65f560e11b9060a4015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103b89190611de5565b6000604051808303816000865af19150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b50915091508161040b57601561041f565b8080602001905181019061041f9190611e01565b60030b979650505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528f81529081018e9052948501529083018a905260016080840152600788900b60a084015285151560c084015260e083018490526101008301829052909190806104aa838b8a610e1c565b9092509050601682146104bc57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528c81529081018b90529485015290830187905260016080840152600786900b60a084015260c0830181905260e0830184905261010083018290529091908061058183610f44565b90925090506016821461059357600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050565b604080516060808201835260008083526001600160a01b038d166020808501829052627a1200858701528551610120810187528d81529081018c905280860191909152918201899052600160808301819052600788900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816106645750506040805160a081018252600181526001600160a01b038e811660208301526000928201839052606082018390528f1660808201528251929350918391906106e7576106e7611e25565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816107095790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b8152602001601e60070b81526020016000151581526020018e6001600160a01b0316815250816000815181106107a9576107a9611e25565b60200260200101819052506000806107c4858b8a8787611054565b915091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa826040516107f991815260200190565b60405180910390a16016821461080e57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a1505050505050505050505050505050565b600060606000806101676001600160a01b031663618dc65e60e01b8787604051602401610889929190611e3b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516108c79190611de5565b6000604051808303816000865af19150503d8060008114610904576040519150601f19603f3d011682016040523d82523d6000602084013e610909565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc828260405161093f929190611e5d565b60405180910390a18161096357601560405180602001604052806000815250610967565b6016815b60039190910b97909650945050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790639b23d3d960e01b9060a40161037a565b604080516060808201835260008083526001600160a01b038b166020808501829052627a1200858701528551610120810187528b81529081018a905280860191909152918201879052600160808301819052600787900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181610a475750506040805160a081018252600181526001600160a01b038c811660208301526000928201839052606082018390528d166080820152825192935091839190610aca57610aca611e25565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a08201528252600019909201910181610aec5790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b81526020018b6001600160a01b031681526020016000151581526020018c6001600160a01b031681525081600081518110610b9157610b91611e25565b60200260200101819052506000806104aa858585611182565b6000806060610bba878686610c44565b809350819450829550505050610bec87308884600081518110610bdf57610bdf611e25565b60200260200101516111ef565b50604080516001600160a01b03898116825288166020820152600787900b8183015290517f215c8eec9aa8fa57cdc8525400a046bf00ff93b20cc529980e01c1ef114fc2289181900360600190a19450945094915050565b6000806060610c54868686611237565b60405183815292955090935091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a160168314610c9c57600080fd5b7ffc6b20023c4bac8ff1c48c1693e0cea5cd3c2163e9c2da41c58f17dd6d9f163d8282604051610ccd929190611e78565b60405180910390a193509350939050565b60006102f18383611335565b6000806060610cfa878686610c44565b91945092509050610bec8730888861136b565b6040516001600160a01b038381166024830152821660448201526000908190819061016790638f8d7f9960e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610d7d9190611de5565b6000604051808303816000865af19150503d8060008114610dba576040519150601f19603f3d011682016040523d82523d6000602084013e610dbf565b606091505b509150915081610dd0576015610de4565b80806020019051810190610de49190611e01565b60030b95945050505050565b60008060006101676001600160a01b0316632e63879b60e01b8686604051602401610d3f929190611e94565b600080848061010001516000015160070b6000148015610e4657506101008101516040015160070b155b15610e5c576101008101516276a7006040909101525b6000806101676001600160a01b031634630fb65bf360e01b8a8a8a604051602401610e89939291906120ba565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610ec79190611de5565b60006040518083038185875af1925050503d8060008114610f04576040519150601f19603f3d011682016040523d82523d6000602084013e610f09565b606091505b509150915081610f1c5760156000610f30565b80806020019051810190610f3091906120e9565b60039190910b999098509650505050505050565b600080828061010001516000015160070b6000148015610f6e57506101008101516040015160070b155b15610f84576101008101516276a7006040909101525b6000806101676001600160a01b03163463ea83f29360e01b88604051602401610fad9190612118565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610feb9190611de5565b60006040518083038185875af1925050503d8060008114611028576040519150601f19603f3d011682016040523d82523d6000602084013e61102d565b606091505b5091509150816110405760156000610967565b8080602001905181019061096791906120e9565b600080868061010001516000015160070b600014801561107e57506101008101516040015160070b155b15611094576101008101516276a7006040909101525b6000806101676001600160a01b031634632af0c59a60e01b8c8c8c8c8c6040516024016110c5959493929190612199565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516111039190611de5565b60006040518083038185875af1925050503d8060008114611140576040519150601f19603f3d011682016040523d82523d6000602084013e611145565b606091505b509150915081611158576015600061116c565b8080602001905181019061116c91906120e9565b60039190910b9b909a5098505050505050505050565b600080848061010001516000015160070b60001480156111ac57506101008101516040015160070b155b156111c2576101008101516276a7006040909101525b6000806101676001600160a01b03163463abb54eb560e01b8a8a8a604051602401610e8993929190612266565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201526000908190819061016790635cfc901160e01b9060a40161037a565b60008060606000806101676001600160a01b031663e0f4059a60e01b8989896040516024016112689392919061231f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112a69190611de5565b6000604051808303816000865af19150503d80600081146112e3576040519150601f19603f3d011682016040523d82523d6000602084013e6112e8565b606091505b50915091508161130b57604080516000808252602082019092526015919061131f565b8080602001905181019061131f919061239e565b60039290920b9a90995090975095505050505050565b6040516001600160a01b03838116602483015282166044820152600090819081906101679063248a35ef60e11b90606401610d3f565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b6084820152600090819081906101679063eca3691760e01b9060a40161037a565b6001600160a01b03811681146113c857600080fd5b50565b80356113d6816113b3565b919050565b600080604083850312156113ee57600080fd5b82356113f9816113b3565b91506020830135611409816113b3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561144d5761144d611414565b60405290565b60405160a0810167ffffffffffffffff8111828210171561144d5761144d611414565b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611414565b604052919050565b600067ffffffffffffffff8211156114c1576114c1611414565b5060051b60200190565b600080604083850312156114de57600080fd5b82356114e9816113b3565b915060208381013567ffffffffffffffff81111561150657600080fd5b8401601f8101861361151757600080fd5b803561152a611525826114a7565b611476565b81815260059190911b8201830190838101908883111561154957600080fd5b928401925b82841015611570578335611561816113b3565b8252928401929084019061154e565b80955050505050509250929050565b6000806000806080858703121561159557600080fd5b84356115a0816113b3565b935060208501356115b0816113b3565b925060408501356115c0816113b3565b9396929550929360600135925050565b600082601f8301126115e157600080fd5b813567ffffffffffffffff8111156115fb576115fb611414565b61160e601f8201601f1916602001611476565b81815284602083860101111561162357600080fd5b816020850160208301376000918101602001919091529392505050565b8060070b81146113c857600080fd5b80356113d681611640565b8060030b81146113c857600080fd5b80356113d68161165a565b803580151581146113d657600080fd5b600082601f83011261169557600080fd5b813560206116a5611525836114a7565b82815260059290921b840181019181810190868411156116c457600080fd5b8286015b848110156117de57803567ffffffffffffffff808211156116e857600080fd5b908801906040601f19838c03810182131561170257600080fd5b61170a61142a565b888501358152828501358481111561172157600080fd5b949094019360a0858e03830112156117395760008081fd5b611741611453565b915061174e898601611674565b82528285013561175d816113b3565b828a0152606085810135858111156117755760008081fd5b6117838f8c838a01016115d0565b858501525060809350838601358581111561179e5760008081fd5b6117ac8f8c838a01016115d0565b82850152505060a085013594506117c2856113b3565b91810193909352808701929092525083529183019183016116c8565b509695505050505050565b60008060008060008060008060006101208a8c03121561180857600080fd5b893567ffffffffffffffff8082111561182057600080fd5b61182c8d838e016115d0565b9a5060208c013591508082111561184257600080fd5b61184e8d838e016115d0565b995060408c013591508082111561186457600080fd5b6118708d838e016115d0565b985061187e60608d0161164f565b975061188c60808d0161164f565b965061189a60a08d01611669565b95506118a860c08d01611674565b94506118b660e08d016113cb565b93506101008c01359150808211156118cd57600080fd5b506118da8c828d01611684565b9150509295985092959850929598565b60008060008060008060c0878903121561190357600080fd5b863567ffffffffffffffff8082111561191b57600080fd5b6119278a838b016115d0565b9750602089013591508082111561193d57600080fd5b6119498a838b016115d0565b9650604089013591508082111561195f57600080fd5b61196b8a838b016115d0565b955061197960608a0161164f565b945061198760808a016113cb565b935060a089013591508082111561199d57600080fd5b506119aa89828a01611684565b9150509295509295509295565b60008060008060008060008060006101208a8c0312156119d657600080fd5b6119df8a6113cb565b98506119ed60208b016113cb565b975060408a013567ffffffffffffffff80821115611a0a57600080fd5b611a168d838e016115d0565b985060608c0135915080821115611a2c57600080fd5b611a388d838e016115d0565b975060808c0135915080821115611a4e57600080fd5b611a5a8d838e016115d0565b9650611a6860a08d0161164f565b9550611a7660c08d0161164f565b94506118b660e08d01611669565b60008060408385031215611a9757600080fd5b8235611aa2816113b3565b9150602083013567ffffffffffffffff811115611abe57600080fd5b611aca858286016115d0565b9150509250929050565b60005b83811015611aef578181015183820152602001611ad7565b50506000910152565b60008151808452611b10816020860160208601611ad4565b601f01601f19169290920160200192915050565b828152604060208201526000611b3d6040830184611af8565b949350505050565b600080600080600080600060e0888a031215611b6057600080fd5b611b69886113cb565b9650611b77602089016113cb565b9550604088013567ffffffffffffffff80821115611b9457600080fd5b611ba08b838c016115d0565b965060608a0135915080821115611bb657600080fd5b611bc28b838c016115d0565b955060808a0135915080821115611bd857600080fd5b611be48b838c016115d0565b9450611bf260a08b0161164f565b935060c08a0135915080821115611c0857600080fd5b50611c158a828b01611684565b91505092959891949750929550565b600082601f830112611c3557600080fd5b81356020611c45611525836114a7565b82815260059290921b84018101918181019086841115611c6457600080fd5b8286015b848110156117de57803567ffffffffffffffff811115611c885760008081fd5b611c968986838b01016115d0565b845250918301918301611c68565b60008060008060808587031215611cba57600080fd5b8435611cc5816113b3565b93506020850135611cd5816113b3565b92506040850135611ce581611640565b9150606085013567ffffffffffffffff811115611d0157600080fd5b611d0d87828801611c24565b91505092959194509250565b60008151808452602080850194506020840160005b83811015611d4d57815160070b87529582019590820190600101611d2e565b509495945050505050565b8381528260070b6020820152606060408201526000611d7a6060830184611d19565b95945050505050565b600080600060608486031215611d9857600080fd5b8335611da3816113b3565b92506020840135611db381611640565b9150604084013567ffffffffffffffff811115611dcf57600080fd5b611ddb86828701611c24565b9150509250925092565b60008251611df7818460208701611ad4565b9190910192915050565b600060208284031215611e1357600080fd5b8151611e1e8161165a565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0383168152604060208201526000611b3d6040830184611af8565b8215158152604060208201526000611b3d6040830184611af8565b8260070b8152604060208201526000611b3d6040830184611d19565b6000604082016001600160a01b03808616845260206040602086015282865180855260608701915060208801945060005b81811015611ee3578551851683529483019491830191600101611ec5565b509098975050505050505050565b600082825180855260208086019550808260051b84010181860160005b84811015611fab57601f198684030189528151604081518552858201519150808686015281511515818601528582015160606001600160a01b038083168289015283850151935060a09250608083818a0152611f6d60e08a0186611af8565b92860151898403603f1901858b0152929450611f898584611af8565b9501511660c09790970196909652505098840198925090830190600101611f0e565b5090979650505050505050565b60006101608251818552611fce82860182611af8565b91505060208301518482036020860152611fe88282611af8565b915050604083015161200560408601826001600160a01b03169052565b506060830151848203606086015261201d8282611af8565b9150506080830151612033608086018215159052565b5060a083015161204860a086018260070b9052565b5060c083015161205c60c086018215159052565b5060e083015184820360e08601526120748282611ef1565b915050610100808401516120b082870182805160070b82526001600160a01b036020820151166020830152604081015160070b60408301525050565b5090949350505050565b6060815260006120cd6060830186611fb8565b90508360070b60208301528260030b6040830152949350505050565b600080604083850312156120fc57600080fd5b82516121078161165a565b6020840151909250611409816113b3565b602081526000611e1e6020830184611fb8565b60008151808452602080850194506020840160005b83811015611d4d578151805160070b8852838101516001600160a01b03908116858a01526040808301511515908a01526060808301511515908a0152608091820151169088015260a09096019590820190600101612140565b600060a08083526121ad60a0840189611fb8565b602060078960070b8287015260408960030b6040880152606087850360608901526121d8858b61212b565b9450608088860360808a0152858a518088528688019150868c01975060005b818110156122515788518051880b845288810151880b8985015286810151880b8785015285810151880b86850152848101511515858501528a01516001600160a01b03168a8401529787019760c0909201916001016121f7565b50909f9e505050505050505050505050505050565b6000606080835261227a6060840187611fb8565b60208482038186015261228d828861212b565b9150604085830360408701528287518085528385019150838901945060005b8181101561230f5785518051600790810b855286820151810b8786015285820151900b85850152878101516001600160a01b039081168986015260808083015115159086015260a09182015116908401529484019460c0909201916001016122ac565b50909a9950505050505050505050565b6000606082016001600160a01b038616835260208560070b60208501526060604085015281855180845260808601915060808160051b87010193506020870160005b8281101561238f57607f1988870301845261237d868351611af8565b95509284019290840190600101612361565b50939998505050505050505050565b6000806000606084860312156123b357600080fd5b83516123be8161165a565b809350506020808501516123d181611640565b604086015190935067ffffffffffffffff8111156123ee57600080fd5b8501601f810187136123ff57600080fd5b805161240d611525826114a7565b81815260059190911b8201830190838101908983111561242c57600080fd5b928401925b8284101561245357835161244481611640565b82529284019290840190612431565b8095505050505050925092509256fea2646970667358221220b8296f48a775ff02aa340b241d086b06f9d71770188c6e8a5480fa6e6dec1c6d64736f6c63430008170033", + "bytecode": "0x608060405234801561001057600080fd5b50600160208181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb499190915560027fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5560047fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f5560087f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b5560107fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643557fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c55600660005260407f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a5561256c806101276000396000f3fe6080604052600436106100d25760003560e01c8063618dc65e1161007f578063c827bd3211610059578063c827bd32146101f9578063de84a77914610228578063f4a01e5b14610248578063fec394da1461026857600080fd5b8063618dc65e146101985780639b23d3d9146101c6578063bb330b12146101e657600080fd5b806329fc46e6116100b057806329fc46e61461015d578063424f165e1461017257806353b4f6781461018557600080fd5b80630fd2601e146100d7578063118741e71461010f57806315dacbea1461013d575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611458565b610288565b60405160079190910b81526020015b60405180910390f35b34801561011b57600080fd5b5061012f61012a366004611548565b6102e5565b604051908152602001610106565b34801561014957600080fd5b506100f76101583660046115fc565b610339565b61017061016b366004611866565b61042d565b005b610170610180366004611967565b610507565b610170610193366004611a34565b6105db565b3480156101a457600080fd5b506101b86101b3366004611b24565b610834565b604051610106929190611bc4565b3480156101d257600080fd5b506100f76101e13660046115fc565b610952565b6101706101f4366004611be5565b610997565b34801561020557600080fd5b50610219610214366004611d78565b610c27565b60405161010693929190611e2c565b34801561023457600080fd5b50610219610243366004611e57565b610cc1565b34801561025457600080fd5b5061012f610263366004611458565b610d5b565b34801561027457600080fd5b50610219610283366004611d78565b610d67565b60006102948383610d8a565b604051600782900b81529091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a1600781900b6016146102df57600080fd5b92915050565b60006102f18383610e6d565b90507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa8160405161032491815260200190565b60405180910390a1601681146102df57600080fd5b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790630aed65f560e11b9060a4015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103b89190611eb9565b6000604051808303816000865af19150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b50915091508161040b57601561041f565b8080602001905181019061041f9190611ed5565b60030b979650505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528f81529081018e9052948501529083018a905260016080840152600788900b60a084015285151560c084015260e083018490526101008301829052909190806104aa838b8a610e99565b9092509050601682146104bc57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528c81529081018b90529485015290830187905260016080840152600786900b60a084015260c0830181905260e0830184905261010083018290529091908061058183610fc1565b90925090506016821461059357600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050565b604080516060808201835260008083526001600160a01b038c166020808501829052627a1200858701528551610120810187528c81529081018b905280860191909152918201889052600160808301819052600788900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816106645790505090506040518060a001604052808660070b81526020018b6001600160a01b031681526020016000151581526020016000151581526020018c6001600160a01b0316815250816000815181106106f6576106f6611ef9565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816107185790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b81526020018c6001600160a01b031681526020016000151581526020018d6001600160a01b0316815250816000815181106107bd576107bd611ef9565b60200260200101819052506000806107d68585856110d1565b9092509050601682146107e857600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a15050505050505050505050505050565b600060606000806101676001600160a01b031663618dc65e60e01b8787604051602401610862929190611f0f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516108a09190611eb9565b6000604051808303816000865af19150503d80600081146108dd576040519150601f19603f3d011682016040523d82523d6000602084013e6108e2565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc8282604051610918929190611f31565b60405180910390a18161093c57601560405180602001604052806000815250610940565b6016815b60039190910b97909650945050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790639b23d3d960e01b9060a40161037a565b604080516060808201835260008083526001600160a01b038e166020808501829052627a1200858701528551610120810187528e81529081018d9052808601919091529182018a9052600160808301819052600789900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181610a205790505090506040518060a001604052808660070b81526020018d6001600160a01b031681526020016000151581526020016000151581526020018e6001600160a01b031681525081600081518110610ab257610ab2611ef9565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a08201528252600019909201910181610ad45790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b8152602001601e60070b81526020016000151581526020018f6001600160a01b031681525081600081518110610b7457610b74611ef9565b6020026020010181905250600080610b8f858c8b878761113e565b915091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa82604051610bc491815260200190565b60405180910390a160168214610bd957600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050505050565b6000806060610c37878686610cc1565b809350819450829550505050610c6987308884600081518110610c5c57610c5c611ef9565b602002602001015161126c565b50604080516001600160a01b03898116825288166020820152600787900b8183015290517f215c8eec9aa8fa57cdc8525400a046bf00ff93b20cc529980e01c1ef114fc2289181900360600190a19450945094915050565b6000806060610cd18686866112b4565b60405183815292955090935091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a160168314610d1957600080fd5b7ffc6b20023c4bac8ff1c48c1693e0cea5cd3c2163e9c2da41c58f17dd6d9f163d8282604051610d4a929190611f4c565b60405180910390a193509350939050565b60006102f183836113b2565b6000806060610d77878686610cc1565b91945092509050610c69873088886113e8565b6040516001600160a01b038381166024830152821660448201526000908190819061016790638f8d7f9960e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610dfa9190611eb9565b6000604051808303816000865af19150503d8060008114610e37576040519150601f19603f3d011682016040523d82523d6000602084013e610e3c565b606091505b509150915081610e4d576015610e61565b80806020019051810190610e619190611ed5565b60030b95945050505050565b60008060006101676001600160a01b0316632e63879b60e01b8686604051602401610dbc929190611f68565b600080848061010001516000015160070b6000148015610ec357506101008101516040015160070b155b15610ed9576101008101516276a7006040909101525b6000806101676001600160a01b031634630fb65bf360e01b8a8a8a604051602401610f069392919061218e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f449190611eb9565b60006040518083038185875af1925050503d8060008114610f81576040519150601f19603f3d011682016040523d82523d6000602084013e610f86565b606091505b509150915081610f995760156000610fad565b80806020019051810190610fad91906121bd565b60039190910b999098509650505050505050565b600080828061010001516000015160070b6000148015610feb57506101008101516040015160070b155b15611001576101008101516276a7006040909101525b6000806101676001600160a01b03163463ea83f29360e01b8860405160240161102a91906121ec565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110689190611eb9565b60006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b5091509150816110bd5760156000610940565b8080602001905181019061094091906121bd565b600080848061010001516000015160070b60001480156110fb57506101008101516040015160070b155b15611111576101008101516276a7006040909101525b6000806101676001600160a01b03163463abb54eb560e01b8a8a8a604051602401610f069392919061226d565b600080868061010001516000015160070b600014801561116857506101008101516040015160070b155b1561117e576101008101516276a7006040909101525b6000806101676001600160a01b031634632af0c59a60e01b8c8c8c8c8c6040516024016111af959493929190612326565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516111ed9190611eb9565b60006040518083038185875af1925050503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b5091509150816112425760156000611256565b8080602001905181019061125691906121bd565b60039190910b9b909a5098505050505050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201526000908190819061016790635cfc901160e01b9060a40161037a565b60008060606000806101676001600160a01b031663e0f4059a60e01b8989896040516024016112e5939291906123f3565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113239190611eb9565b6000604051808303816000865af19150503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b50915091508161138857604080516000808252602082019092526015919061139c565b8080602001905181019061139c9190612472565b60039290920b9a90995090975095505050505050565b6040516001600160a01b03838116602483015282166044820152600090819081906101679063248a35ef60e11b90606401610dbc565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b6084820152600090819081906101679063eca3691760e01b9060a40161037a565b6001600160a01b038116811461144557600080fd5b50565b803561145381611430565b919050565b6000806040838503121561146b57600080fd5b823561147681611430565b9150602083013561148681611430565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156114ca576114ca611491565b60405290565b60405160a0810167ffffffffffffffff811182821017156114ca576114ca611491565b604051601f8201601f1916810167ffffffffffffffff8111828210171561151c5761151c611491565b604052919050565b600067ffffffffffffffff82111561153e5761153e611491565b5060051b60200190565b6000806040838503121561155b57600080fd5b823561156681611430565b915060208381013567ffffffffffffffff81111561158357600080fd5b8401601f8101861361159457600080fd5b80356115a76115a282611524565b6114f3565b81815260059190911b820183019083810190888311156115c657600080fd5b928401925b828410156115ed5783356115de81611430565b825292840192908401906115cb565b80955050505050509250929050565b6000806000806080858703121561161257600080fd5b843561161d81611430565b9350602085013561162d81611430565b9250604085013561163d81611430565b9396929550929360600135925050565b600082601f83011261165e57600080fd5b813567ffffffffffffffff81111561167857611678611491565b61168b601f8201601f19166020016114f3565b8181528460208386010111156116a057600080fd5b816020850160208301376000918101602001919091529392505050565b8060070b811461144557600080fd5b8035611453816116bd565b8060030b811461144557600080fd5b8035611453816116d7565b8035801515811461145357600080fd5b600082601f83011261171257600080fd5b813560206117226115a283611524565b82815260059290921b8401810191818101908684111561174157600080fd5b8286015b8481101561185b57803567ffffffffffffffff8082111561176557600080fd5b908801906040601f19838c03810182131561177f57600080fd5b6117876114a7565b888501358152828501358481111561179e57600080fd5b949094019360a0858e03830112156117b65760008081fd5b6117be6114d0565b91506117cb8986016116f1565b8252828501356117da81611430565b828a0152606085810135858111156117f25760008081fd5b6118008f8c838a010161164d565b858501525060809350838601358581111561181b5760008081fd5b6118298f8c838a010161164d565b82850152505060a0850135945061183f85611430565b9181019390935280870192909252508352918301918301611745565b509695505050505050565b60008060008060008060008060006101208a8c03121561188557600080fd5b893567ffffffffffffffff8082111561189d57600080fd5b6118a98d838e0161164d565b9a5060208c01359150808211156118bf57600080fd5b6118cb8d838e0161164d565b995060408c01359150808211156118e157600080fd5b6118ed8d838e0161164d565b98506118fb60608d016116cc565b975061190960808d016116cc565b965061191760a08d016116e6565b955061192560c08d016116f1565b945061193360e08d01611448565b93506101008c013591508082111561194a57600080fd5b506119578c828d01611701565b9150509295985092959850929598565b60008060008060008060c0878903121561198057600080fd5b863567ffffffffffffffff8082111561199857600080fd5b6119a48a838b0161164d565b975060208901359150808211156119ba57600080fd5b6119c68a838b0161164d565b965060408901359150808211156119dc57600080fd5b6119e88a838b0161164d565b95506119f660608a016116cc565b9450611a0460808a01611448565b935060a0890135915080821115611a1a57600080fd5b50611a2789828a01611701565b9150509295509295509295565b600080600080600080600080610100898b031215611a5157600080fd5b611a5a89611448565b9750611a6860208a01611448565b9650604089013567ffffffffffffffff80821115611a8557600080fd5b611a918c838d0161164d565b975060608b0135915080821115611aa757600080fd5b611ab38c838d0161164d565b965060808b0135915080821115611ac957600080fd5b611ad58c838d0161164d565b9550611ae360a08c016116cc565b9450611af160c08c016116cc565b935060e08b0135915080821115611b0757600080fd5b50611b148b828c01611701565b9150509295985092959890939650565b60008060408385031215611b3757600080fd5b8235611b4281611430565b9150602083013567ffffffffffffffff811115611b5e57600080fd5b611b6a8582860161164d565b9150509250929050565b60005b83811015611b8f578181015183820152602001611b77565b50506000910152565b60008151808452611bb0816020860160208601611b74565b601f01601f19169290920160200192915050565b828152604060208201526000611bdd6040830184611b98565b949350505050565b6000806000806000806000806000806101408b8d031215611c0557600080fd5b611c0e8b611448565b9950611c1c60208c01611448565b985060408b013567ffffffffffffffff80821115611c3957600080fd5b611c458e838f0161164d565b995060608d0135915080821115611c5b57600080fd5b611c678e838f0161164d565b985060808d0135915080821115611c7d57600080fd5b611c898e838f0161164d565b9750611c9760a08e016116cc565b9650611ca560c08e016116cc565b9550611cb360e08e016116e6565b9450611cc26101008e016116cc565b93506101208d0135915080821115611cd957600080fd5b50611ce68d828e01611701565b9150509295989b9194979a5092959850565b600082601f830112611d0957600080fd5b81356020611d196115a283611524565b82815260059290921b84018101918181019086841115611d3857600080fd5b8286015b8481101561185b57803567ffffffffffffffff811115611d5c5760008081fd5b611d6a8986838b010161164d565b845250918301918301611d3c565b60008060008060808587031215611d8e57600080fd5b8435611d9981611430565b93506020850135611da981611430565b92506040850135611db9816116bd565b9150606085013567ffffffffffffffff811115611dd557600080fd5b611de187828801611cf8565b91505092959194509250565b60008151808452602080850194506020840160005b83811015611e2157815160070b87529582019590820190600101611e02565b509495945050505050565b8381528260070b6020820152606060408201526000611e4e6060830184611ded565b95945050505050565b600080600060608486031215611e6c57600080fd5b8335611e7781611430565b92506020840135611e87816116bd565b9150604084013567ffffffffffffffff811115611ea357600080fd5b611eaf86828701611cf8565b9150509250925092565b60008251611ecb818460208701611b74565b9190910192915050565b600060208284031215611ee757600080fd5b8151611ef2816116d7565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0383168152604060208201526000611bdd6040830184611b98565b8215158152604060208201526000611bdd6040830184611b98565b8260070b8152604060208201526000611bdd6040830184611ded565b6000604082016001600160a01b03808616845260206040602086015282865180855260608701915060208801945060005b81811015611fb7578551851683529483019491830191600101611f99565b509098975050505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561207f57601f198684030189528151604081518552858201519150808686015281511515818601528582015160606001600160a01b038083168289015283850151935060a09250608083818a015261204160e08a0186611b98565b92860151898403603f1901858b015292945061205d8584611b98565b9501511660c09790970196909652505098840198925090830190600101611fe2565b5090979650505050505050565b600061016082518185526120a282860182611b98565b915050602083015184820360208601526120bc8282611b98565b91505060408301516120d960408601826001600160a01b03169052565b50606083015184820360608601526120f18282611b98565b9150506080830151612107608086018215159052565b5060a083015161211c60a086018260070b9052565b5060c083015161213060c086018215159052565b5060e083015184820360e08601526121488282611fc5565b9150506101008084015161218482870182805160070b82526001600160a01b036020820151166020830152604081015160070b60408301525050565b5090949350505050565b6060815260006121a1606083018661208c565b90508360070b60208301528260030b6040830152949350505050565b600080604083850312156121d057600080fd5b82516121db816116d7565b602084015190925061148681611430565b602081526000611ef2602083018461208c565b60008151808452602080850194506020840160005b83811015611e21578151805160070b8852838101516001600160a01b03908116858a01526040808301511515908a01526060808301511515908a0152608091820151169088015260a09096019590820190600101612214565b60006060808352612281606084018761208c565b60208482038186015261229482886121ff565b9150604085830360408701528287518085528385019150838901945060005b818110156123165785518051600790810b855286820151810b8786015285820151900b85850152878101516001600160a01b039081168986015260808083015115159086015260a09182015116908401529484019460c0909201916001016122b3565b50909a9950505050505050505050565b600060a080835261233a60a084018961208c565b602060078960070b8287015260408960030b604088015260608785036060890152612365858b6121ff565b9450608088860360808a0152858a518088528688019150868c01975060005b818110156123de5788518051880b845288810151880b8985015286810151880b8785015285810151880b86850152848101511515858501528a01516001600160a01b03168a8401529787019760c090920191600101612384565b50909f9e505050505050505050505050505050565b6000606082016001600160a01b038616835260208560070b60208501526060604085015281855180845260808601915060808160051b87010193506020870160005b8281101561246357607f19888703018452612451868351611b98565b95509284019290840190600101612435565b50939998505050505050505050565b60008060006060848603121561248757600080fd5b8351612492816116d7565b809350506020808501516124a5816116bd565b604086015190935067ffffffffffffffff8111156124c257600080fd5b8501601f810187136124d357600080fd5b80516124e16115a282611524565b81815260059190911b8201830190838101908983111561250057600080fd5b928401925b82841015612527578351612518816116bd565b82529284019290840190612505565b8095505050505050925092509256fea2646970667358221220f545ed1684576e322f86daca558c844efc3bae013f6f196c82e4ef76bb79165764736f6c63430008170033", + "deployedBytecode": "0x6080604052600436106100d25760003560e01c8063618dc65e1161007f578063c827bd3211610059578063c827bd32146101f9578063de84a77914610228578063f4a01e5b14610248578063fec394da1461026857600080fd5b8063618dc65e146101985780639b23d3d9146101c6578063bb330b12146101e657600080fd5b806329fc46e6116100b057806329fc46e61461015d578063424f165e1461017257806353b4f6781461018557600080fd5b80630fd2601e146100d7578063118741e71461010f57806315dacbea1461013d575b600080fd5b3480156100e357600080fd5b506100f76100f2366004611458565b610288565b60405160079190910b81526020015b60405180910390f35b34801561011b57600080fd5b5061012f61012a366004611548565b6102e5565b604051908152602001610106565b34801561014957600080fd5b506100f76101583660046115fc565b610339565b61017061016b366004611866565b61042d565b005b610170610180366004611967565b610507565b610170610193366004611a34565b6105db565b3480156101a457600080fd5b506101b86101b3366004611b24565b610834565b604051610106929190611bc4565b3480156101d257600080fd5b506100f76101e13660046115fc565b610952565b6101706101f4366004611be5565b610997565b34801561020557600080fd5b50610219610214366004611d78565b610c27565b60405161010693929190611e2c565b34801561023457600080fd5b50610219610243366004611e57565b610cc1565b34801561025457600080fd5b5061012f610263366004611458565b610d5b565b34801561027457600080fd5b50610219610283366004611d78565b610d67565b60006102948383610d8a565b604051600782900b81529091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a1600781900b6016146102df57600080fd5b92915050565b60006102f18383610e6d565b90507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa8160405161032491815260200190565b60405180910390a1601681146102df57600080fd5b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790630aed65f560e11b9060a4015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103b89190611eb9565b6000604051808303816000865af19150503d80600081146103f5576040519150601f19603f3d011682016040523d82523d6000602084013e6103fa565b606091505b50915091508161040b57601561041f565b8080602001905181019061041f9190611ed5565b60030b979650505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528f81529081018e9052948501529083018a905260016080840152600788900b60a084015285151560c084015260e083018490526101008301829052909190806104aa838b8a610e99565b9092509050601682146104bc57600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050565b604080516060808201835260008083526001600160a01b0386166020808501829052627a1200858701528551610120810187528c81529081018b90529485015290830187905260016080840152600786900b60a084015260c0830181905260e0830184905261010083018290529091908061058183610fc1565b90925090506016821461059357600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050565b604080516060808201835260008083526001600160a01b038c166020808501829052627a1200858701528551610120810187528c81529081018b905280860191909152918201889052600160808301819052600788900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282526000199092019101816106645790505090506040518060a001604052808660070b81526020018b6001600160a01b031681526020016000151581526020016000151581526020018c6001600160a01b0316815250816000815181106106f6576106f6611ef9565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a082015282526000199092019101816107185790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b81526020018c6001600160a01b031681526020016000151581526020018d6001600160a01b0316815250816000815181106107bd576107bd611ef9565b60200260200101819052506000806107d68585856110d1565b9092509050601682146107e857600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a15050505050505050505050505050565b600060606000806101676001600160a01b031663618dc65e60e01b8787604051602401610862929190611f0f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516108a09190611eb9565b6000604051808303816000865af19150503d80600081146108dd576040519150601f19603f3d011682016040523d82523d6000602084013e6108e2565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc8282604051610918929190611f31565b60405180910390a18161093c57601560405180602001604052806000815250610940565b6016815b60039190910b97909650945050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290526000908190819061016790639b23d3d960e01b9060a40161037a565b604080516060808201835260008083526001600160a01b038e166020808501829052627a1200858701528551610120810187528e81529081018d9052808601919091529182018a9052600160808301819052600789900b60a084015260c0830182905260e083018690526101008301849052845181815280860190955292939192909190816020015b6040805160a081018252600080825260208083018290529282018190526060820181905260808201528252600019909201910181610a205790505090506040518060a001604052808660070b81526020018d6001600160a01b031681526020016000151581526020016000151581526020018e6001600160a01b031681525081600081518110610ab257610ab2611ef9565b6020908102919091010152604080516001808252818301909252600091816020015b6040805160c08101825260008082526020808301829052928201819052606082018190526080820181905260a08201528252600019909201910181610ad45790505090506040518060c00160405280600460070b8152602001600560070b8152602001600a60070b8152602001601e60070b81526020016000151581526020018f6001600160a01b031681525081600081518110610b7457610b74611ef9565b6020026020010181905250600080610b8f858c8b878761113e565b915091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa82604051610bc491815260200190565b60405180910390a160168214610bd957600080fd5b6040516001600160a01b03821681527f7bb17726df1f3adee8aa00ba8e8bc5d6f182af3bbf77604639cb7f008dd3b4ed9060200160405180910390a150505050505050505050505050505050565b6000806060610c37878686610cc1565b809350819450829550505050610c6987308884600081518110610c5c57610c5c611ef9565b602002602001015161126c565b50604080516001600160a01b03898116825288166020820152600787900b8183015290517f215c8eec9aa8fa57cdc8525400a046bf00ff93b20cc529980e01c1ef114fc2289181900360600190a19450945094915050565b6000806060610cd18686866112b4565b60405183815292955090935091507f90a5cf4cffe88b4edbb041cfc7a8a812c48a5ec30b84640fb37690875168e3aa9060200160405180910390a160168314610d1957600080fd5b7ffc6b20023c4bac8ff1c48c1693e0cea5cd3c2163e9c2da41c58f17dd6d9f163d8282604051610d4a929190611f4c565b60405180910390a193509350939050565b60006102f183836113b2565b6000806060610d77878686610cc1565b91945092509050610c69873088886113e8565b6040516001600160a01b038381166024830152821660448201526000908190819061016790638f8d7f9960e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610dfa9190611eb9565b6000604051808303816000865af19150503d8060008114610e37576040519150601f19603f3d011682016040523d82523d6000602084013e610e3c565b606091505b509150915081610e4d576015610e61565b80806020019051810190610e619190611ed5565b60030b95945050505050565b60008060006101676001600160a01b0316632e63879b60e01b8686604051602401610dbc929190611f68565b600080848061010001516000015160070b6000148015610ec357506101008101516040015160070b155b15610ed9576101008101516276a7006040909101525b6000806101676001600160a01b031634630fb65bf360e01b8a8a8a604051602401610f069392919061218e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f449190611eb9565b60006040518083038185875af1925050503d8060008114610f81576040519150601f19603f3d011682016040523d82523d6000602084013e610f86565b606091505b509150915081610f995760156000610fad565b80806020019051810190610fad91906121bd565b60039190910b999098509650505050505050565b600080828061010001516000015160070b6000148015610feb57506101008101516040015160070b155b15611001576101008101516276a7006040909101525b6000806101676001600160a01b03163463ea83f29360e01b8860405160240161102a91906121ec565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110689190611eb9565b60006040518083038185875af1925050503d80600081146110a5576040519150601f19603f3d011682016040523d82523d6000602084013e6110aa565b606091505b5091509150816110bd5760156000610940565b8080602001905181019061094091906121bd565b600080848061010001516000015160070b60001480156110fb57506101008101516040015160070b155b15611111576101008101516276a7006040909101525b6000806101676001600160a01b03163463abb54eb560e01b8a8a8a604051602401610f069392919061226d565b600080868061010001516000015160070b600014801561116857506101008101516040015160070b155b1561117e576101008101516276a7006040909101525b6000806101676001600160a01b031634632af0c59a60e01b8c8c8c8c8c6040516024016111af959493929190612326565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516111ed9190611eb9565b60006040518083038185875af1925050503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b5091509150816112425760156000611256565b8080602001905181019061125691906121bd565b60039190910b9b909a5098505050505050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201526000908190819061016790635cfc901160e01b9060a40161037a565b60008060606000806101676001600160a01b031663e0f4059a60e01b8989896040516024016112e5939291906123f3565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516113239190611eb9565b6000604051808303816000865af19150503d8060008114611360576040519150601f19603f3d011682016040523d82523d6000602084013e611365565b606091505b50915091508161138857604080516000808252602082019092526015919061139c565b8080602001905181019061139c9190612472565b60039290920b9a90995090975095505050505050565b6040516001600160a01b03838116602483015282166044820152600090819081906101679063248a35ef60e11b90606401610dbc565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b6084820152600090819081906101679063eca3691760e01b9060a40161037a565b6001600160a01b038116811461144557600080fd5b50565b803561145381611430565b919050565b6000806040838503121561146b57600080fd5b823561147681611430565b9150602083013561148681611430565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156114ca576114ca611491565b60405290565b60405160a0810167ffffffffffffffff811182821017156114ca576114ca611491565b604051601f8201601f1916810167ffffffffffffffff8111828210171561151c5761151c611491565b604052919050565b600067ffffffffffffffff82111561153e5761153e611491565b5060051b60200190565b6000806040838503121561155b57600080fd5b823561156681611430565b915060208381013567ffffffffffffffff81111561158357600080fd5b8401601f8101861361159457600080fd5b80356115a76115a282611524565b6114f3565b81815260059190911b820183019083810190888311156115c657600080fd5b928401925b828410156115ed5783356115de81611430565b825292840192908401906115cb565b80955050505050509250929050565b6000806000806080858703121561161257600080fd5b843561161d81611430565b9350602085013561162d81611430565b9250604085013561163d81611430565b9396929550929360600135925050565b600082601f83011261165e57600080fd5b813567ffffffffffffffff81111561167857611678611491565b61168b601f8201601f19166020016114f3565b8181528460208386010111156116a057600080fd5b816020850160208301376000918101602001919091529392505050565b8060070b811461144557600080fd5b8035611453816116bd565b8060030b811461144557600080fd5b8035611453816116d7565b8035801515811461145357600080fd5b600082601f83011261171257600080fd5b813560206117226115a283611524565b82815260059290921b8401810191818101908684111561174157600080fd5b8286015b8481101561185b57803567ffffffffffffffff8082111561176557600080fd5b908801906040601f19838c03810182131561177f57600080fd5b6117876114a7565b888501358152828501358481111561179e57600080fd5b949094019360a0858e03830112156117b65760008081fd5b6117be6114d0565b91506117cb8986016116f1565b8252828501356117da81611430565b828a0152606085810135858111156117f25760008081fd5b6118008f8c838a010161164d565b858501525060809350838601358581111561181b5760008081fd5b6118298f8c838a010161164d565b82850152505060a0850135945061183f85611430565b9181019390935280870192909252508352918301918301611745565b509695505050505050565b60008060008060008060008060006101208a8c03121561188557600080fd5b893567ffffffffffffffff8082111561189d57600080fd5b6118a98d838e0161164d565b9a5060208c01359150808211156118bf57600080fd5b6118cb8d838e0161164d565b995060408c01359150808211156118e157600080fd5b6118ed8d838e0161164d565b98506118fb60608d016116cc565b975061190960808d016116cc565b965061191760a08d016116e6565b955061192560c08d016116f1565b945061193360e08d01611448565b93506101008c013591508082111561194a57600080fd5b506119578c828d01611701565b9150509295985092959850929598565b60008060008060008060c0878903121561198057600080fd5b863567ffffffffffffffff8082111561199857600080fd5b6119a48a838b0161164d565b975060208901359150808211156119ba57600080fd5b6119c68a838b0161164d565b965060408901359150808211156119dc57600080fd5b6119e88a838b0161164d565b95506119f660608a016116cc565b9450611a0460808a01611448565b935060a0890135915080821115611a1a57600080fd5b50611a2789828a01611701565b9150509295509295509295565b600080600080600080600080610100898b031215611a5157600080fd5b611a5a89611448565b9750611a6860208a01611448565b9650604089013567ffffffffffffffff80821115611a8557600080fd5b611a918c838d0161164d565b975060608b0135915080821115611aa757600080fd5b611ab38c838d0161164d565b965060808b0135915080821115611ac957600080fd5b611ad58c838d0161164d565b9550611ae360a08c016116cc565b9450611af160c08c016116cc565b935060e08b0135915080821115611b0757600080fd5b50611b148b828c01611701565b9150509295985092959890939650565b60008060408385031215611b3757600080fd5b8235611b4281611430565b9150602083013567ffffffffffffffff811115611b5e57600080fd5b611b6a8582860161164d565b9150509250929050565b60005b83811015611b8f578181015183820152602001611b77565b50506000910152565b60008151808452611bb0816020860160208601611b74565b601f01601f19169290920160200192915050565b828152604060208201526000611bdd6040830184611b98565b949350505050565b6000806000806000806000806000806101408b8d031215611c0557600080fd5b611c0e8b611448565b9950611c1c60208c01611448565b985060408b013567ffffffffffffffff80821115611c3957600080fd5b611c458e838f0161164d565b995060608d0135915080821115611c5b57600080fd5b611c678e838f0161164d565b985060808d0135915080821115611c7d57600080fd5b611c898e838f0161164d565b9750611c9760a08e016116cc565b9650611ca560c08e016116cc565b9550611cb360e08e016116e6565b9450611cc26101008e016116cc565b93506101208d0135915080821115611cd957600080fd5b50611ce68d828e01611701565b9150509295989b9194979a5092959850565b600082601f830112611d0957600080fd5b81356020611d196115a283611524565b82815260059290921b84018101918181019086841115611d3857600080fd5b8286015b8481101561185b57803567ffffffffffffffff811115611d5c5760008081fd5b611d6a8986838b010161164d565b845250918301918301611d3c565b60008060008060808587031215611d8e57600080fd5b8435611d9981611430565b93506020850135611da981611430565b92506040850135611db9816116bd565b9150606085013567ffffffffffffffff811115611dd557600080fd5b611de187828801611cf8565b91505092959194509250565b60008151808452602080850194506020840160005b83811015611e2157815160070b87529582019590820190600101611e02565b509495945050505050565b8381528260070b6020820152606060408201526000611e4e6060830184611ded565b95945050505050565b600080600060608486031215611e6c57600080fd5b8335611e7781611430565b92506020840135611e87816116bd565b9150604084013567ffffffffffffffff811115611ea357600080fd5b611eaf86828701611cf8565b9150509250925092565b60008251611ecb818460208701611b74565b9190910192915050565b600060208284031215611ee757600080fd5b8151611ef2816116d7565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0383168152604060208201526000611bdd6040830184611b98565b8215158152604060208201526000611bdd6040830184611b98565b8260070b8152604060208201526000611bdd6040830184611ded565b6000604082016001600160a01b03808616845260206040602086015282865180855260608701915060208801945060005b81811015611fb7578551851683529483019491830191600101611f99565b509098975050505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561207f57601f198684030189528151604081518552858201519150808686015281511515818601528582015160606001600160a01b038083168289015283850151935060a09250608083818a015261204160e08a0186611b98565b92860151898403603f1901858b015292945061205d8584611b98565b9501511660c09790970196909652505098840198925090830190600101611fe2565b5090979650505050505050565b600061016082518185526120a282860182611b98565b915050602083015184820360208601526120bc8282611b98565b91505060408301516120d960408601826001600160a01b03169052565b50606083015184820360608601526120f18282611b98565b9150506080830151612107608086018215159052565b5060a083015161211c60a086018260070b9052565b5060c083015161213060c086018215159052565b5060e083015184820360e08601526121488282611fc5565b9150506101008084015161218482870182805160070b82526001600160a01b036020820151166020830152604081015160070b60408301525050565b5090949350505050565b6060815260006121a1606083018661208c565b90508360070b60208301528260030b6040830152949350505050565b600080604083850312156121d057600080fd5b82516121db816116d7565b602084015190925061148681611430565b602081526000611ef2602083018461208c565b60008151808452602080850194506020840160005b83811015611e21578151805160070b8852838101516001600160a01b03908116858a01526040808301511515908a01526060808301511515908a0152608091820151169088015260a09096019590820190600101612214565b60006060808352612281606084018761208c565b60208482038186015261229482886121ff565b9150604085830360408701528287518085528385019150838901945060005b818110156123165785518051600790810b855286820151810b8786015285820151900b85850152878101516001600160a01b039081168986015260808083015115159086015260a09182015116908401529484019460c0909201916001016122b3565b50909a9950505050505050505050565b600060a080835261233a60a084018961208c565b602060078960070b8287015260408960030b604088015260608785036060890152612365858b6121ff565b9450608088860360808a0152858a518088528688019150868c01975060005b818110156123de5788518051880b845288810151880b8985015286810151880b8785015285810151880b86850152848101511515858501528a01516001600160a01b03168a8401529787019760c090920191600101612384565b50909f9e505050505050505050505050505050565b6000606082016001600160a01b038616835260208560070b60208501526060604085015281855180845260808601915060808160051b87010193506020870160005b8281101561246357607f19888703018452612451868351611b98565b95509284019290840190600101612435565b50939998505050505050505050565b60008060006060848603121561248757600080fd5b8351612492816116d7565b809350506020808501516124a5816116bd565b604086015190935067ffffffffffffffff8111156124c257600080fd5b8501601f810187136124d357600080fd5b80516124e16115a282611524565b81815260059190911b8201830190838101908983111561250057600080fd5b928401925b82841015612527578351612518816116bd565b82529284019290840190612505565b8095505050505050925092509256fea2646970667358221220f545ed1684576e322f86daca558c844efc3bae013f6f196c82e4ef76bb79165764736f6c63430008170033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol b/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol index 228683341..03d94d2e3 100644 --- a/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol +++ b/contracts/hts-precompile/examples/token-create/TokenCreateCustom.sol @@ -50,6 +50,7 @@ contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelpe int64 initialTotalSupply, int64 maxSupply, int32 decimals, + int64 feeAmount, IHederaTokenService.TokenKey[] memory keys ) public payable { IHederaTokenService.Expiry memory expiry = IHederaTokenService.Expiry( @@ -61,7 +62,7 @@ contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelpe ); IHederaTokenService.FixedFee[] memory fixedFees = new IHederaTokenService.FixedFee[](1); - fixedFees[0] = IHederaTokenService.FixedFee(1, fixedFeeTokenAddress, false, false, treasury); + fixedFees[0] = IHederaTokenService.FixedFee(feeAmount, fixedFeeTokenAddress, false, false, treasury); IHederaTokenService.FractionalFee[] memory fractionalFees = new IHederaTokenService.FractionalFee[](1); fractionalFees[0] = IHederaTokenService.FractionalFee(4, 5, 10, 30, false, treasury); @@ -110,6 +111,7 @@ contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelpe string memory symbol, string memory memo, int64 maxSupply, + int64 feeAmount, IHederaTokenService.TokenKey[] memory keys ) public payable { IHederaTokenService.Expiry memory expiry = IHederaTokenService.Expiry( @@ -121,7 +123,7 @@ contract TokenCreateCustomContract is HederaTokenService, ExpiryHelper, KeyHelpe ); IHederaTokenService.FixedFee[] memory fixedFees = new IHederaTokenService.FixedFee[](1); - fixedFees[0] = IHederaTokenService.FixedFee(1, fixedFeeTokenAddress, false, false, treasury); + fixedFees[0] = IHederaTokenService.FixedFee(feeAmount, fixedFeeTokenAddress, false, false, treasury); IHederaTokenService.RoyaltyFee[] memory royaltyFees = new IHederaTokenService.RoyaltyFee[](1); royaltyFees[0] = IHederaTokenService.RoyaltyFee(4, 5, 10, fixedFeeTokenAddress, false, treasury); From a83922f18a5ae76cedef64a57aac28cae0a7e1a5 Mon Sep 17 00:00:00 2001 From: Logan Nguyen Date: Wed, 6 Mar 2024 09:44:37 -0500 Subject: [PATCH 2/4] fix: fixed unit tests to adapt new feeAmount parameter Signed-off-by: Logan Nguyen --- .../token-create-custom/index.test.ts | 7 +++++-- .../tokenCreateCustom-interactions/index.ts | 12 ++++++++++-- .../token-create/tokenCreateCustomContract.js | 3 +++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/system-contract-dapp-playground/__tests__/hedera/hts-interactions/token-create-custom/index.test.ts b/system-contract-dapp-playground/__tests__/hedera/hts-interactions/token-create-custom/index.test.ts index d3c01f90b..0ed0ce853 100644 --- a/system-contract-dapp-playground/__tests__/hedera/hts-interactions/token-create-custom/index.test.ts +++ b/system-contract-dapp-playground/__tests__/hedera/hts-interactions/token-create-custom/index.test.ts @@ -47,6 +47,7 @@ describe('createHederaFungibleToken test suite', () => { const initialSupply = 900000000; // 9 WHBAR const metadata = ['Zeus', 'Athena', 'Apollo']; const msgValue = '20000000000000000000'; // 20 hbar + const feeAmount = 1000; // 20 hbar const recipient = '0x34810E139b451e0a4c67d5743E956Ac8990842A8'; const contractId = '0xbdcdf69052c9fc01e38377d05cc83c28ee43f24a'; const feeTokenAddress = '0x00000000000000000000000000000000000006Ab'; @@ -161,7 +162,8 @@ describe('createHederaFungibleToken test suite', () => { contractId, inputKeys, msgValue, - feeTokenAddress + feeTokenAddress, + feeAmount ); expect(txRes.err).toBeNull; @@ -342,7 +344,8 @@ describe('createHederaFungibleToken test suite', () => { contractId, inputKeys, msgValue, - feeTokenAddress + feeTokenAddress, + feeAmount ); expect(txRes.err).toBeNull; diff --git a/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts b/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts index ca80a890e..90edc4681 100644 --- a/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts +++ b/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts @@ -56,6 +56,8 @@ import { TNetworkName } from '@/types/common'; * * @param feeTokenAddress?: string * + * @param feeTokenAmount?: number + * * @return Promise * * @see https://github.com/hashgraph/hedera-smart-contracts/blob/main/contracts/hts-precompile/IHederaTokenService.sol#L136 @@ -73,7 +75,8 @@ export const createHederaFungibleToken = async ( treasury: string, inputKeys: ICommonKeyObject[], msgValue: string, - feeTokenAddress?: string + feeTokenAddress?: string, + feeTokenAmount?: number ): Promise => { // sanitize params let sanitizeErr; @@ -114,6 +117,7 @@ export const createHederaFungibleToken = async ( initialTotalSupply, maxSupply, decimals, + feeTokenAmount, keyRes.hederaTokenKeys, { value: ethers.parseEther(msgValue), @@ -175,6 +179,8 @@ export const createHederaFungibleToken = async ( * * @param feeTokenAddress?: ethers.AddressLike * + * @param feeTokenAmount?: number + * * @return Promise * * @see https://github.com/hashgraph/hedera-smart-contracts/blob/main/contracts/hts-precompile/IHederaTokenService.sol#L136 @@ -189,7 +195,8 @@ export const createHederaNonFungibleToken = async ( treasury: ethers.AddressLike, inputKeys: ICommonKeyObject[], msgValue: string, - feeTokenAddress?: ethers.AddressLike + feeTokenAddress?: ethers.AddressLike, + feeTokenAmount?: number ): Promise => { // sanitize params let sanitizeErr; @@ -224,6 +231,7 @@ export const createHederaNonFungibleToken = async ( symbol, memo, maxSupply, + feeTokenAmount, keyRes.hederaTokenKeys, { value: ethers.parseEther(msgValue), diff --git a/test/hts-precompile/token-create/tokenCreateCustomContract.js b/test/hts-precompile/token-create/tokenCreateCustomContract.js index 369b33a3f..d457098e2 100644 --- a/test/hts-precompile/token-create/tokenCreateCustomContract.js +++ b/test/hts-precompile/token-create/tokenCreateCustomContract.js @@ -31,6 +31,7 @@ describe('TokenCreateCustomContract Test Suite', () => { const initialSupply = 900000000; // 9 WHBAR const maxSupply = 30000000000; // 300 WHBAR const decimals = 8; + const feeAmount = 1000n; const freezeDefaultStatus = false; let keys, signers, fixedFeeTokenAddress, tokenCreateCustomContract; @@ -133,6 +134,7 @@ describe('TokenCreateCustomContract Test Suite', () => { initialSupply, maxSupply, decimals, + feeAmount, keys, { value: '35000000000000000000', @@ -179,6 +181,7 @@ describe('TokenCreateCustomContract Test Suite', () => { tokenSymbol, tokenMemo, maxSupply, + feeAmount, keys, { value: '20000000000000000000', From b29ece688940af3d3edc74da872ca47c97e4ba18 Mon Sep 17 00:00:00 2001 From: Logan Nguyen Date: Wed, 6 Mar 2024 12:10:35 -0500 Subject: [PATCH 3/4] feat: updated System Contract DApp UI to adapt feeAmount parameter Signed-off-by: Logan Nguyen --- .../methods/handleSanitizeFormInputs.tsx | 6 ++- .../methods/FungibleTokenCreate/index.tsx | 45 ++++++++++++----- .../methods/NonFungibleTokenCreate/index.tsx | 49 +++++++++++++------ .../HTS/token-create-custom/constant.ts | 7 +++ 4 files changed, 78 insertions(+), 29 deletions(-) diff --git a/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx b/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx index bfa548184..1e834e263 100644 --- a/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx +++ b/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx @@ -39,6 +39,7 @@ interface ParamsProps { spenderAddress?: string; withCustomFee?: boolean; accountAddress?: string; + feeTokenAmount?: number; serialNumbers?: number[]; receiverAddress?: string; feeTokenAddress?: string; @@ -47,8 +48,8 @@ interface ParamsProps { autoRenewAccount?: string; tokenAddresses?: string[]; recipientAddress?: string; - associatingAddress?: string; tokenAddressToMint?: string; + associatingAddress?: string; hederaTokenAddress?: string; fungibleReceivers?: string[]; nonFungibleReceivers?: string[]; @@ -101,6 +102,7 @@ export const handleSanitizeHederaFormInputs = ({ senderAddress, withCustomFee, serialNumbers, + feeTokenAmount, spenderAddress, accountAddress, tokenAddresses, @@ -133,6 +135,8 @@ export const handleSanitizeHederaFormInputs = ({ sanitizeErr = 'Invalid denomination token ID'; } else if (!isAddress(treasury)) { sanitizeErr = 'Invalid treasury account address'; + } else if (withCustomFee && Number(feeTokenAmount) <= 0) { + sanitizeErr = 'Custom fee amount must be positive'; } // sanitize keys if (!sanitizeErr && keys) { diff --git a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx index cb232ebce..ed56787e2 100644 --- a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx +++ b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx @@ -84,6 +84,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply: '', initSupply: '', feeTokenAddress: '', + feeTokenAmount: '', freezeStatus: false, }; const [paramValues, setParamValues] = useState(initialParamValues); @@ -128,6 +129,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply, initSupply, freezeStatus, + feeTokenAmount, feeTokenAddress, } = paramValues; @@ -143,6 +145,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply, initSupply, withCustomFee, + feeTokenAmount, feeTokenAddress, }); @@ -168,7 +171,8 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { treasury, keys, feeValue, - withCustomFee ? feeTokenAddress : undefined + withCustomFee ? feeTokenAddress : undefined, + withCustomFee ? Number(feeTokenAmount) : undefined ); // turn is loading off @@ -318,18 +322,33 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { {/* fee token address */} {withCustomFee && ( - + <> + + + + )} {/* treasury */} diff --git a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx index 6da74ebe9..15f763101 100644 --- a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx +++ b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx @@ -78,6 +78,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { treasury: '', feeValue: '', maxSupply: '', + feeTokenAmount: '', feeTokenAddress: '', }; const [paramValues, setParamValues] = useState(initialParamValues); @@ -112,7 +113,8 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { /** @dev handle invoking the API to interact with smart contract and create non fungible token */ const handleCreatingNonFungibleToken = async () => { - const { name, symbol, memo, maxSupply, treasury, feeTokenAddress, feeValue } = paramValues; + const { name, symbol, memo, maxSupply, treasury, feeTokenAddress, feeValue, feeTokenAmount } = + paramValues; // sanitize params const sanitizeErr = handleSanitizeHederaFormInputs({ @@ -124,6 +126,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { treasury, maxSupply, withCustomFee, + feeTokenAmount, feeTokenAddress, }); @@ -146,7 +149,8 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { treasury, keys, feeValue, - withCustomFee ? feeTokenAddress : undefined + withCustomFee ? feeTokenAddress : undefined, + withCustomFee ? Number(feeTokenAmount) : undefined ); // turn is loading off @@ -248,18 +252,33 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { {/* fee token address */} {withCustomFee && ( - + <> + + + + )} {/* keys */} @@ -281,7 +300,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { feeType={'SERVICE'} paramValues={paramValues.feeValue} placeHolder={'Service fee...'} - executeBtnTitle={'Create Fungible Token'} + executeBtnTitle={'Create Non Fungible Token'} handleInputOnChange={handleInputOnChange} explanation={ 'Represents the fee in HBAR directly paid to the contract system of the Hedera Token Service' diff --git a/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts b/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts index fe8e72ae5..af7ed1899 100644 --- a/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts +++ b/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts @@ -107,6 +107,13 @@ export const htsTokenCreateParamFields = { inputPlaceholder: 'The denomination token ID...', explanation: 'represents the ID of token that is used for fixed fee denomination', }, + feeTokenAmount: { + ...HEDERA_SHARED_PARAM_INPUT_FIELDS, + inputType: 'number', + paramKey: 'feeTokenAmount', + inputPlaceholder: 'The fee amount...', + explanation: 'represents the number of units to assess as a fee', + }, customFee: { paramKey: 'customFee', explanation: { From c540ccd56581bb00fd766e87c0b6a749ca565349 Mon Sep 17 00:00:00 2001 From: Logan Nguyen Date: Wed, 6 Mar 2024 15:05:43 -0500 Subject: [PATCH 4/4] chore: renamed feeTokenAmount to feeAmount Signed-off-by: Logan Nguyen --- .../tokenCreateCustom-interactions/index.ts | 12 ++++----- .../methods/handleSanitizeFormInputs.tsx | 6 ++--- .../methods/FungibleTokenCreate/index.tsx | 26 +++++++++--------- .../methods/NonFungibleTokenCreate/index.tsx | 27 +++++++++---------- .../HTS/token-create-custom/constant.ts | 4 +-- 5 files changed, 37 insertions(+), 38 deletions(-) diff --git a/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts b/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts index 90edc4681..e5e63db9c 100644 --- a/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts +++ b/system-contract-dapp-playground/src/api/hedera/hts-interactions/tokenCreateCustom-interactions/index.ts @@ -56,7 +56,7 @@ import { TNetworkName } from '@/types/common'; * * @param feeTokenAddress?: string * - * @param feeTokenAmount?: number + * @param feeAmount?: number * * @return Promise * @@ -76,7 +76,7 @@ export const createHederaFungibleToken = async ( inputKeys: ICommonKeyObject[], msgValue: string, feeTokenAddress?: string, - feeTokenAmount?: number + feeAmount?: number ): Promise => { // sanitize params let sanitizeErr; @@ -117,7 +117,7 @@ export const createHederaFungibleToken = async ( initialTotalSupply, maxSupply, decimals, - feeTokenAmount, + feeAmount, keyRes.hederaTokenKeys, { value: ethers.parseEther(msgValue), @@ -179,7 +179,7 @@ export const createHederaFungibleToken = async ( * * @param feeTokenAddress?: ethers.AddressLike * - * @param feeTokenAmount?: number + * @param feeAmount?: number * * @return Promise * @@ -196,7 +196,7 @@ export const createHederaNonFungibleToken = async ( inputKeys: ICommonKeyObject[], msgValue: string, feeTokenAddress?: ethers.AddressLike, - feeTokenAmount?: number + feeAmount?: number ): Promise => { // sanitize params let sanitizeErr; @@ -231,7 +231,7 @@ export const createHederaNonFungibleToken = async ( symbol, memo, maxSupply, - feeTokenAmount, + feeAmount, keyRes.hederaTokenKeys, { value: ethers.parseEther(msgValue), diff --git a/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx b/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx index 1e834e263..17e1c13a2 100644 --- a/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx +++ b/system-contract-dapp-playground/src/components/common/methods/handleSanitizeFormInputs.tsx @@ -39,7 +39,7 @@ interface ParamsProps { spenderAddress?: string; withCustomFee?: boolean; accountAddress?: string; - feeTokenAmount?: number; + feeAmount?: number; serialNumbers?: number[]; receiverAddress?: string; feeTokenAddress?: string; @@ -102,7 +102,7 @@ export const handleSanitizeHederaFormInputs = ({ senderAddress, withCustomFee, serialNumbers, - feeTokenAmount, + feeAmount, spenderAddress, accountAddress, tokenAddresses, @@ -135,7 +135,7 @@ export const handleSanitizeHederaFormInputs = ({ sanitizeErr = 'Invalid denomination token ID'; } else if (!isAddress(treasury)) { sanitizeErr = 'Invalid treasury account address'; - } else if (withCustomFee && Number(feeTokenAmount) <= 0) { + } else if (withCustomFee && Number(feeAmount) <= 0) { sanitizeErr = 'Custom fee amount must be positive'; } // sanitize keys diff --git a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx index ed56787e2..bff11015a 100644 --- a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx +++ b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/FungibleTokenCreate/index.tsx @@ -84,7 +84,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply: '', initSupply: '', feeTokenAddress: '', - feeTokenAmount: '', + feeAmount: '', freezeStatus: false, }; const [paramValues, setParamValues] = useState(initialParamValues); @@ -129,7 +129,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply, initSupply, freezeStatus, - feeTokenAmount, + feeAmount, feeTokenAddress, } = paramValues; @@ -145,7 +145,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { maxSupply, initSupply, withCustomFee, - feeTokenAmount, + feeAmount, feeTokenAddress, }); @@ -172,7 +172,7 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { keys, feeValue, withCustomFee ? feeTokenAddress : undefined, - withCustomFee ? Number(feeTokenAmount) : undefined + withCustomFee ? Number(feeAmount) : undefined ); // turn is loading off @@ -337,16 +337,16 @@ const FungibleTokenCreate = ({ baseContract }: PageProps) => { /> )} diff --git a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx index 15f763101..624c02f4f 100644 --- a/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx +++ b/system-contract-dapp-playground/src/components/contract-interaction/hts/token-create-custom/methods/NonFungibleTokenCreate/index.tsx @@ -78,7 +78,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { treasury: '', feeValue: '', maxSupply: '', - feeTokenAmount: '', + feeAmount: '', feeTokenAddress: '', }; const [paramValues, setParamValues] = useState(initialParamValues); @@ -113,8 +113,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { /** @dev handle invoking the API to interact with smart contract and create non fungible token */ const handleCreatingNonFungibleToken = async () => { - const { name, symbol, memo, maxSupply, treasury, feeTokenAddress, feeValue, feeTokenAmount } = - paramValues; + const { name, symbol, memo, maxSupply, treasury, feeTokenAddress, feeValue, feeAmount } = paramValues; // sanitize params const sanitizeErr = handleSanitizeHederaFormInputs({ @@ -126,7 +125,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { treasury, maxSupply, withCustomFee, - feeTokenAmount, + feeAmount, feeTokenAddress, }); @@ -150,7 +149,7 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { keys, feeValue, withCustomFee ? feeTokenAddress : undefined, - withCustomFee ? Number(feeTokenAmount) : undefined + withCustomFee ? Number(feeAmount) : undefined ); // turn is loading off @@ -267,16 +266,16 @@ const NonFungibleTokenCreate = ({ baseContract }: PageProps) => { /> )} diff --git a/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts b/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts index af7ed1899..bcb69af41 100644 --- a/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts +++ b/system-contract-dapp-playground/src/utils/contract-interactions/HTS/token-create-custom/constant.ts @@ -107,10 +107,10 @@ export const htsTokenCreateParamFields = { inputPlaceholder: 'The denomination token ID...', explanation: 'represents the ID of token that is used for fixed fee denomination', }, - feeTokenAmount: { + feeAmount: { ...HEDERA_SHARED_PARAM_INPUT_FIELDS, inputType: 'number', - paramKey: 'feeTokenAmount', + paramKey: 'feeAmount', inputPlaceholder: 'The fee amount...', explanation: 'represents the number of units to assess as a fee', },