[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint8", "name": "_decimals", "type": "uint8" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes4", "name": "functionSig", "type": "bytes4" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "PublicCapabilityUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint8", "name": "role", "type": "uint8" }, { "indexed": true, "internalType": "bytes4", "name": "functionSig", "type": "bytes4" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "RoleCapabilityUpdated", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint8", "name": "role", "type": "uint8" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "UserRoleUpdated", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "bytes4", "name": "functionSig", "type": "bytes4" } ], "name": "canCall", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "role", "type": "uint8" }, { "internalType": "bytes4", "name": "functionSig", "type": "bytes4" } ], "name": "doesRoleHaveCapability", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" } ], "name": "doesUserHaveRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "getRolesWithCapability", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "getUserRoles", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "name": "isCapabilityPublic", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "users", "type": "address[]" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" } ], "name": "migration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "functionSig", "type": "bytes4" }, { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setPublicCapability", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "role", "type": "uint8" }, { "internalType": "bytes4", "name": "functionSig", "type": "bytes4" }, { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setRoleCapability", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint8", "name": "role", "type": "uint8" }, { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setUserRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "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": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60e06040523480156200001157600080fd5b5060405162001a9838038062001a9883398101604081905262000034916200036e565b8080858585826000908051906020019062000051929190620001fb565b50815162000067906001906020850190620001fb565b5060ff81166080524660a0526200007d620000f2565b60c0525050600680546001600160a01b0319166001600160a01b03841690811790915560405190915033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350620000e89050816a52b7d2dcc80cd2e40000006200018e565b505050506200051a565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200012691906200044f565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254620001a29190620004f3565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620002099062000412565b90600052602060002090601f0160209004810192826200022d576000855562000278565b82601f106200024857805160ff191683800117855562000278565b8280016001018555821562000278579182015b82811115620002785782518255916020019190600101906200025b565b50620002869291506200028a565b5090565b5b808211156200028657600081556001016200028b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002c957600080fd5b81516001600160401b0380821115620002e657620002e6620002a1565b604051601f8301601f19908116603f01168101908282118183101715620003115762000311620002a1565b816040528381526020925086838588010111156200032e57600080fd5b600091505b8382101562000352578582018301518183018401529082019062000333565b83821115620003645760008385830101525b9695505050505050565b600080600080608085870312156200038557600080fd5b84516001600160401b03808211156200039d57600080fd5b620003ab88838901620002b7565b95506020870151915080821115620003c257600080fd5b50620003d187828801620002b7565b935050604085015160ff81168114620003e957600080fd5b60608601519092506001600160a01b03811681146200040757600080fd5b939692955090935050565b600181811c908216806200042757607f821691505b602082108114156200044957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200046c57607f831692505b60208084108214156200048d57634e487b7160e01b86526022600452602486fd5b818015620004a45760018114620004b657620004e5565b60ff19861689528489019650620004e5565b60008a81526020902060005b86811015620004dd5781548b820152908501908301620004c2565b505084890196505b509498975050505050505050565b600082198211156200051557634e487b7160e01b600052601160045260246000fd5b500190565b60805160a05160c05161154e6200054a60003960006107420152600061070d0152600061026a015261154e6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806367aff484116100de5780639ea5556d11610097578063dd62ed3e11610071578063dd62ed3e146103b1578063e688747b146103dc578063ea7ca27614610412578063ed0d0efb1461044957600080fd5b80639ea5556d14610378578063a9059cbb1461038b578063d505accf1461039e57600080fd5b806367aff484146102df57806370a08231146102f25780637ecebe001461031257806386bed3e0146103325780638da5cb5b1461034557806395d89b411461037057600080fd5b806318160ddd1161014b5780633644e515116101255780633644e5151461029e57806340c10f19146102a657806342966c68146102b95780634b5159da146102cc57600080fd5b806318160ddd1461024957806323b872dd14610252578063313ce5671461026557600080fd5b806306a36aee1461019357806306fdde03146101c6578063095ea7b3146101db5780630bade8a4146101fe5780630ea9b75b1461022157806313af403514610236575b600080fd5b6101b36101a1366004610fe4565b60076020526000908152604090205481565b6040519081526020015b60405180910390f35b6101ce610469565b6040516101bd9190610fff565b6101ee6101e9366004611054565b6104f7565b60405190151581526020016101bd565b6101ee61020c366004611096565b60086020526000908152604090205460ff1681565b61023461022f3660046110d2565b610563565b005b610234610244366004610fe4565b610644565b6101b360025481565b6101ee610260366004611115565b6106c2565b61028c7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016101bd565b6101b3610709565b6102346102b4366004611054565b610764565b6102346102c7366004611151565b6107a4565b6102346102da36600461116a565b6107b1565b6102346102ed36600461119d565b610843565b6101b3610300366004610fe4565b60036020526000908152604090205481565b6101b3610320366004610fe4565b60056020526000908152604090205481565b6101ee6103403660046111c9565b61090b565b600654610358906001600160a01b031681565b6040516001600160a01b0390911681526020016101bd565b6101ce61096b565b61023461038636600461123f565b610978565b6101ee610399366004611054565b610a7f565b6102346103ac3660046112ab565b610abd565b6101b36103bf366004611315565b600460209081526000928352604080842090915290825290205481565b6101ee6103ea36600461133f565b6001600160e01b03191660009081526009602052604090205460ff919091161c600116151590565b6101ee61042036600461135b565b6001600160a01b0391909116600090815260076020526040902054600160ff9092161c16151590565b6101b3610457366004611096565b60096020526000908152604090205481565b6000805461047690611385565b80601f01602080910402602001604051908101604052809291908181526020018280546104a290611385565b80156104ef5780601f106104c4576101008083540402835291602001916104ef565b820191906000526020600020905b8154815290600101906020018083116104d257829003601f168201915b505050505081565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105529086815260200190565b60405180910390a350600192915050565b610579336000356001600160e01b031916610d01565b61059e5760405162461bcd60e51b8152600401610595906113c0565b60405180910390fd5b80156105ce576001600160e01b0319821660009081526009602052604090208054600160ff86161b1790556105f5565b6001600160e01b0319821660009081526009602052604090208054600160ff86161b191690555b816001600160e01b0319168360ff167fbfe16b2c35ce23dfd1ab0e7b5d086a10060c9b52d1574e1680c881b3b3a2b15183604051610637911515815260200190565b60405180910390a3505050565b61065a336000356001600160e01b031916610d01565b6106765760405162461bcd60e51b8152600401610595906113c0565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b60006106da336000356001600160e01b031916610d01565b6106f65760405162461bcd60e51b8152600401610595906113c0565b610701848484610d2c565b949350505050565b60007f0000000000000000000000000000000000000000000000000000000000000000461461073f5761073a610e0c565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b61077a336000356001600160e01b031916610d01565b6107965760405162461bcd60e51b8152600401610595906113c0565b6107a08282610ea6565b5050565b6107ae3382610f00565b50565b6107c7336000356001600160e01b031916610d01565b6107e35760405162461bcd60e51b8152600401610595906113c0565b6001600160e01b03198216600081815260086020908152604091829020805460ff191685151590811790915591519182527f36d28126bef21a4f3765d7fcb7c45cead463ae4c41094ef3b771ede598544103910160405180910390a25050565b610859336000356001600160e01b031916610d01565b6108755760405162461bcd60e51b8152600401610595906113c0565b80156108a4576001600160a01b03831660009081526007602052604090208054600160ff85161b1790556108ca565b6001600160a01b03831660009081526007602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610637911515815260200190565b6001600160e01b0319811660009081526008602052604081205460ff168061096457506001600160e01b031982166000908152600960209081526040808320546001600160a01b03871684526007909252909120541615155b9392505050565b6001805461047690611385565b61098e336000356001600160e01b031916610d01565b6109aa5760405162461bcd60e51b8152600401610595906113c0565b60065483906001600160a01b031660005b82811015610a765760008787838181106109d7576109d76113e6565b90506020020160208101906109ec9190610fe4565b90506000868684818110610a0257610a026113e6565b6001600160a01b03858116600081815260036020908152604080832080549683029890980135958601909755928a16808252908690208054859003905594518381529295509392506000805160206114f9833981519152910160405180910390a3505080610a6f90611412565b90506109bb565b50505050505050565b6000610a97336000356001600160e01b031916610d01565b610ab35760405162461bcd60e51b8152600401610595906113c0565b6109648383610f62565b42841015610b0d5760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610595565b60006001610b19610709565b6001600160a01b038a811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600084529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610c25573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610c5b5750876001600160a01b0316816001600160a01b0316145b610c985760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610595565b6001600160a01b0390811660009081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b6000610d0d838361090b565b8061096457506006546001600160a01b03848116911614905092915050565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000198114610d8857610d63838261142d565b6001600160a01b03861660009081526004602090815260408083203384529091529020555b6001600160a01b03851660009081526003602052604081208054859290610db090849061142d565b90915550506001600160a01b03808516600081815260036020526040908190208054870190555190918716906000805160206114f983398151915290610df99087815260200190565b60405180910390a3506001949350505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051610e3e9190611444565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254610eb891906114e0565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481526000805160206114f983398151915291015b60405180910390a35050565b6001600160a01b03821660009081526003602052604081208054839290610f2890849061142d565b90915550506002805482900390556040518181526000906001600160a01b038416906000805160206114f983398151915290602001610ef4565b33600090815260036020526040812080548391908390610f8390849061142d565b90915550506001600160a01b038316600081815260036020526040908190208054850190555133906000805160206114f9833981519152906105529086815260200190565b80356001600160a01b0381168114610fdf57600080fd5b919050565b600060208284031215610ff657600080fd5b61096482610fc8565b600060208083528351808285015260005b8181101561102c57858101830151858201604001528201611010565b8181111561103e576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561106757600080fd5b61107083610fc8565b946020939093013593505050565b80356001600160e01b031981168114610fdf57600080fd5b6000602082840312156110a857600080fd5b6109648261107e565b803560ff81168114610fdf57600080fd5b80358015158114610fdf57600080fd5b6000806000606084860312156110e757600080fd5b6110f0846110b1565b92506110fe6020850161107e565b915061110c604085016110c2565b90509250925092565b60008060006060848603121561112a57600080fd5b61113384610fc8565b925061114160208501610fc8565b9150604084013590509250925092565b60006020828403121561116357600080fd5b5035919050565b6000806040838503121561117d57600080fd5b6111868361107e565b9150611194602084016110c2565b90509250929050565b6000806000606084860312156111b257600080fd5b6111bb84610fc8565b92506110fe602085016110b1565b600080604083850312156111dc57600080fd5b6111e583610fc8565b91506111946020840161107e565b60008083601f84011261120557600080fd5b50813567ffffffffffffffff81111561121d57600080fd5b6020830191508360208260051b850101111561123857600080fd5b9250929050565b6000806000806040858703121561125557600080fd5b843567ffffffffffffffff8082111561126d57600080fd5b611279888389016111f3565b9096509450602087013591508082111561129257600080fd5b5061129f878288016111f3565b95989497509550505050565b600080600080600080600060e0888a0312156112c657600080fd5b6112cf88610fc8565b96506112dd60208901610fc8565b955060408801359450606088013593506112f9608089016110b1565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561132857600080fd5b61133183610fc8565b915061119460208401610fc8565b6000806040838503121561135257600080fd5b6111e5836110b1565b6000806040838503121561136e57600080fd5b61137783610fc8565b9150611194602084016110b1565b600181811c9082168061139957607f821691505b602082108114156113ba57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611426576114266113fc565b5060010190565b60008282101561143f5761143f6113fc565b500390565b600080835481600182811c91508083168061146057607f831692505b602080841082141561148057634e487b7160e01b86526022600452602486fd5b81801561149457600181146114a5576114d2565b60ff198616895284890196506114d2565b60008a81526020902060005b868110156114ca5781548b8201529085019083016114b1565b505084890196505b509498975050505050505050565b600082198211156114f3576114f36113fc565b50019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f04cc7b69e3f6a60db486e453671d06b88a1933951184aecfd04166d0f36843d64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000002532c3d363306fa6d625e4cbad996bcf534e8154000000000000000000000000000000000000000000000000000000000000000c53747572647920546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055354524459000000000000000000000000000000000000000000000000000000