[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "TFHESenderNotAllowed", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "placeholder", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint64", "name": "amount", "type": "uint64" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "errorId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "euint64", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "euint64", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "einput", "name": "encryptedAmount", "type": "bytes32" }, { "internalType": "bytes", "name": "inputProof", "type": "bytes" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "euint64", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "amount", "type": "uint64" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "einput", "name": "encryptedAmount", "type": "bytes32" }, { "internalType": "bytes", "name": "inputProof", "type": "bytes" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "euint64", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "euint64", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "einput", "name": "encryptedAmount", "type": "bytes32" }, { "internalType": "bytes", "name": "inputProof", "type": "bytes" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801562000010575f80fd5b5060405162001a1138038062001a11833981016040819052620000339162000342565b818133828282620001b5620000d9604080516080810182525f808252602082018190529181018290526060810191909152506040805160808101825273fee8407e2f5e3ee68ad77cae98c434e637f516e5815273687408ab54661ba0b4aef3a44156c616c6955e07602082015273fb03be574d14c256d56f09a198b586bdfc0a9de291810191909152739d6891a6240d6130c54ae243d8005063d05fe14b606082015290565b80517fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea60080546001600160a01b03199081166001600160a01b039384161790915560208301517fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea6018054831691841691909117905560408301517fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea6028054831691841691909117905560608301517fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea6038054909216921691909117905550565b6001600160a01b038116620001e357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620001ee816200021d565b506002620001fd838262000432565b5060036200020c828262000432565b5050505050505050620004fe565b50565b600180546001600160a01b03191690556200021a815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112620002a5575f80fd5b81516001600160401b0380821115620002c257620002c262000281565b604051601f8301601f19908116603f01168101908282118183101715620002ed57620002ed62000281565b81604052838152602092508660208588010111156200030a575f80fd5b5f91505b838210156200032d57858201830151818301840152908201906200030e565b5f602085830101528094505050505092915050565b5f806040838503121562000354575f80fd5b82516001600160401b03808211156200036b575f80fd5b620003798683870162000295565b935060208501519150808211156200038f575f80fd5b506200039e8582860162000295565b9150509250929050565b600181811c90821680620003bd57607f821691505b602082108103620003dc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200042d57805f5260205f20601f840160051c81016020851015620004095750805b601f840160051c820191505b818110156200042a575f815560010162000415565b50505b505050565b81516001600160401b038111156200044e576200044e62000281565b62000466816200045f8454620003a8565b84620003e2565b602080601f8311600181146200049c575f8415620004845750858301515b5f19600386901b1c1916600185901b178555620004f6565b5f85815260208120601f198616915b82811015620004cc57888601518255948401946001909101908401620004ab565b5085821015620004ea57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b611505806200050c5f395ff3fe608060405234801561000f575f80fd5b506004361061012f575f3560e01c80638da5cb5b116100ad578063b32c10011161007d578063e30c397811610063578063e30c397814610296578063f2fde38b146102a7578063fb9d09c8146102ba575f80fd5b8063b32c100114610270578063dd62ed3e14610283575f80fd5b80638da5cb5b1461021e57806395d89b41146102425780639a0943521461024a578063a9059cbb1461025d575f80fd5b8063313ce56711610102578063715018a6116100e8578063715018a6146101f957806379ba5097146102035780637b7e0a5a1461020b575f80fd5b8063313ce567146101b457806370a08231146101c3575f80fd5b806306fdde0314610133578063095ea7b31461015157806318160ddd1461017457806323b872dd146101a1575b5f80fd5b61013b6102cd565b60405161014891906111f4565b60405180910390f35b61016461015f366004611221565b61035d565b6040519015158152602001610148565b600154600160a01b900467ffffffffffffffff1660405167ffffffffffffffff9091168152602001610148565b6101646101af366004611249565b6103cb565b60405160068152602001610148565b6101eb6101d1366004611282565b6001600160a01b03165f9081526004602052604090205490565b604051908152602001610148565b6102016103fc565b005b61020161040f565b6101646102193660046112e0565b610458565b5f546001600160a01b03165b6040516001600160a01b039091168152602001610148565b61013b61049c565b610164610258366004611336565b6104ab565b61016461026b366004611221565b6104fd565b61016461027e3660046112e0565b610539565b6101eb6102913660046113a0565b61057d565b6001546001600160a01b031661022a565b6102016102b5366004611282565b6105ac565b6102016102c83660046113d1565b610629565b6060600280546102dc906113f8565b80601f0160208091040260200160405190810160405280929190818152602001828054610308906113f8565b80156103535780601f1061032a57610100808354040283529160200191610353565b820191905f5260205f20905b81548152906001019060200180831161033657829003601f168201915b5050505050905090565b5f610367826106cf565b336103738185856106f5565b836001600160a01b0316816001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f196040516103b991815260200190565b60405180910390a35060019392505050565b5f6103d5826106cf565b335f6103e28683866107a2565b90506103f086868684610833565b50600195945050505050565b610404610893565b61040d5f6108bf565b565b60015433906001600160a01b0316811461044c5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610455816108bf565b50565b5f6103f08561026b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506108e592505050565b6060600380546102dc906113f8565b5f6104f086866101af8787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506108e592505050565b5060019695505050505050565b5f610507826106cf565b335f908152600460205260408120546105219084906108f2565b905061052f33858584610833565b5060019392505050565b5f6103f08561015f8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506108e592505050565b6001600160a01b038083165f9081526005602090815260408083209385168352929052908120545b9392505050565b6105b4610893565b600180546001600160a01b03831673ffffffffffffffffffffffffffffffffffffffff1990911681179091556105f15f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610631610893565b61063b3382610920565b60015461065a908290600160a01b900467ffffffffffffffff16611430565b600180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b67ffffffffffffffff93841602179055604051908216815233907f9109de113672aaca72ede8bc906f7aafabee865311ac020fb15c71edf94a0a019060200160405180910390a250565b6106d88161096f565b61045557604051632fa38b3f60e01b815260040160405180910390fd5b6001600160a01b0383166107275760405163e602df0560e01b81526001600160a01b0384166004820152602401610443565b6001600160a01b03821661075957604051634a1406b160e11b81526001600160a01b0383166004820152602401610443565b6001600160a01b038084165f90815260056020908152604080832093861683529290522081905561078981610980565b610793818461098a565b61079d818361098a565b505050565b6001600160a01b038084165f9081526005602090815260408083209386168352929052908120545f6107d484836108f2565b6001600160a01b0387165f90815260046020526040812054919250906107fb9086906108f2565b90505f6108088284610998565b905061082888886108238461081d898c6109a4565b896109d2565b6106f5565b979650505050505050565b61083f848484846109e6565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f1960405161088591815260200190565b60405180910390a350505050565b5f546001600160a01b0316331461040d5760405163118cdaa760e01b8152336004820152602401610443565b6001805473ffffffffffffffffffffffffffffffffffffffff1916905561045581610b0d565b5f6105a583836005610b69565b5f82610904576109015f610c7a565b92505b81610915576109125f610c7a565b91505b6105a583835f610c86565b61092a8282610d56565b6040515f1981526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b5f61097a8233610da7565b92915050565b6104558130610e2b565b6109948282610e2b565b5050565b5f6105a583835f610e98565b5f826109b6576109b35f610c7a565b92505b816109c7576109c45f610c7a565b91505b6105a583835f610f22565b5f6109de848484610fac565b949350505050565b6001600160a01b038416610a1857604051634b637e8f60e11b81526001600160a01b0385166004820152602401610443565b6001600160a01b038316610a4a5760405163ec442f0560e01b81526001600160a01b0384166004820152602401610443565b5f610a5e8284610a595f610c7a565b6109d2565b6001600160a01b0385165f9081526004602052604081205491925090610a849083611042565b6001600160a01b0386165f9081526004602052604090208190559050610aa981610980565b610ab3818661098a565b6001600160a01b0386165f90815260046020526040812054610ad590846109a4565b6001600160a01b0388165f9081526004602052604090208190559050610afa81610980565b610b04818861098a565b50505050505050565b5f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea601546040516302e817ff60e41b81525f915f805160206114d9833981519152916001600160a01b0390911690632e817ff090610bd39088903390899060f88a901b90600401611464565b6020604051808303815f875af1158015610bef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1391906114a2565b81546040516346ce4e4960e11b8152600481018390523360248201529193506001600160a01b031690638d9c9c92906044015f604051808303815f87803b158015610c5c575f80fd5b505af1158015610c6e573d5f803e3d5ffd5b50505050509392505050565b5f61097a826005611070565b5f808215610c995750600160f81b610c9c565b505f5b7fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea601546040516334a6d7b960e11b815260048101879052602481018690526001600160f81b0319831660448201525f805160206114d9833981519152916001600160a01b03169063694daf72906064015b6020604051808303815f875af1158015610d28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d4c91906114a2565b9695505050505050565b6001600160a01b0382165f90815260046020526040812054610d789083611103565b6001600160a01b0384165f9081526004602052604090208190559050610d9d81610980565b61079d818461098a565b5f805f805160206114d98339815191528054604051632fd514cd60e11b8152600481018790526001600160a01b038681166024830152929350911690635faa299a90604401602060405180830381865afa158015610e07573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109de91906114b9565b5f5f805160206114d98339815191528054604051631974142760e21b8152600481018690526001600160a01b0385811660248301529293509116906365d0509c906044015f604051808303815f87803b158015610e86575f80fd5b505af1158015610b04573d5f803e3d5ffd5b5f808215610eab5750600160f81b610eae565b505f5b7fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea60154604051630ccd46b160e31b815260048101879052602481018690526001600160f81b0319831660448201525f805160206114d9833981519152916001600160a01b03169063666a358890606401610d0c565b5f808215610f355750600160f81b610f38565b505f5b7fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea60154604051638c14cc2160e01b815260048101879052602481018690526001600160f81b0319831660448201525f805160206114d9833981519152916001600160a01b031690638c14cc2190606401610d0c565b5f805f805160206114d9833981519152600181015460405163cb3b940760e01b81526004810188905260248101879052604481018690529192506001600160a01b03169063cb3b9407906064016020604051808303815f875af1158015611015573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103991906114a2565b95945050505050565b5f82611054576110515f610c7a565b92505b81611065576110625f610c7a565b91505b6105a583835f611127565b5f805f805160206114d98339815191526001810154604051631ce2e8d760e31b8152600481018790526001600160f81b031960f887901b1660248201529192506001600160a01b03169063e71746b8906044016020604051808303815f875af11580156110df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109de91906114a2565b5f82611115576111125f610c7a565b92505b6105a5838367ffffffffffffffff1660015b5f80821561113a5750600160f81b61113d565b505f5b7fed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea6015460405163f953e42760e01b815260048101879052602481018690526001600160f81b0319831660448201525f805160206114d9833981519152916001600160a01b03169063f953e42790606401610d0c565b5f81518084525f5b818110156111d5576020818501810151868301820152016111b9565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6105a560208301846111b1565b80356001600160a01b038116811461121c575f80fd5b919050565b5f8060408385031215611232575f80fd5b61123b83611206565b946020939093013593505050565b5f805f6060848603121561125b575f80fd5b61126484611206565b925061127260208501611206565b9150604084013590509250925092565b5f60208284031215611292575f80fd5b6105a582611206565b5f8083601f8401126112ab575f80fd5b50813567ffffffffffffffff8111156112c2575f80fd5b6020830191508360208285010111156112d9575f80fd5b9250929050565b5f805f80606085870312156112f3575f80fd5b6112fc85611206565b935060208501359250604085013567ffffffffffffffff81111561131e575f80fd5b61132a8782880161129b565b95989497509550505050565b5f805f805f6080868803121561134a575f80fd5b61135386611206565b945061136160208701611206565b935060408601359250606086013567ffffffffffffffff811115611383575f80fd5b61138f8882890161129b565b969995985093965092949392505050565b5f80604083850312156113b1575f80fd5b6113ba83611206565b91506113c860208401611206565b90509250929050565b5f602082840312156113e1575f80fd5b813567ffffffffffffffff811681146105a5575f80fd5b600181811c9082168061140c57607f821691505b60208210810361142a57634e487b7160e01b5f52602260045260245ffd5b50919050565b67ffffffffffffffff81811683821601908082111561145d57634e487b7160e01b5f52601160045260245ffd5b5092915050565b8481526001600160a01b0384166020820152608060408201525f61148b60808301856111b1565b905060ff60f81b8316606083015295945050505050565b5f602082840312156114b2575f80fd5b5051919050565b5f602082840312156114c9575f80fd5b815180151581146105a5575f80fdfeed8d60e34876f751cc8b014c560745351147d9de11b9347c854e881b128ea600a164736f6c6343000818000a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000094e6172616767617261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e41524100000000000000000000000000000000000000000000000000000000