diff --git a/abis/Dispenser.json b/abis/Dispenser.json new file mode 100644 index 0000000..23557f5 --- /dev/null +++ b/abis/Dispenser.json @@ -0,0 +1,334 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Dispenser", + "sourceName": "contracts/pools/dispenser/Dispenser.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_router", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatokenAddress", + "type": "address" + } + ], + "name": "DispenserActivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newAllowedSwapper", + "type": "address" + } + ], + "name": "DispenserAllowedSwapperChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatokenAddress", + "type": "address" + } + ], + "name": "DispenserCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatokenAddress", + "type": "address" + } + ], + "name": "DispenserDeactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "OwnerWithdrawed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "datatokenAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "TokensDispensed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBalance", + "type": "uint256" + } + ], + "name": "activate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBalance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "allowedSwapper", + "type": "address" + } + ], + "name": "create", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "datatokensList", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + } + ], + "name": "deactivate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "destination", + "type": "address" + } + ], + "name": "dispense", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + } + ], + "name": "ownerWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + }, + { + "internalType": "address", + "name": "newAllowedSwapper", + "type": "address" + } + ], + "name": "setAllowedSwapper", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "datatoken", + "type": "address" + } + ], + "name": "status", + "outputs": [ + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "bool", + "name": "isMinter", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "maxTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "allowedSwapper", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161135d38038061135d83398101604081905261002f916100ae565b6001600160a01b0381166100895760405162461bcd60e51b815260206004820152601f60248201527f44697370656e7365723a2057726f6e6720526f75746572206164647265737300604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b03929092169190911790556100de565b6000602082840312156100c057600080fd5b81516001600160a01b03811681146100d757600080fd5b9392505050565b611270806100ed6000396000f3fe6080604052600436106100865760003560e01c806345d6646b1161005957806345d6646b1461011d578063645b8b1b1461013d578063938d71d0146101a0578063f887ea40146101c0578063f9bfaa7d146101e057600080fd5b80631d746d831461008b57806324ce2917146100a05780633398086a146100c05780633ea053eb146100fd575b600080fd5b61009e6100993660046110c4565b610200565b005b3480156100ac57600080fd5b5061009e6100bb366004611133565b6107d6565b3480156100cc57600080fd5b506100e06100db3660046111ac565b6109ea565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010957600080fd5b5061009e61011836600461106f565b610a14565b34801561012957600080fd5b5061009e610138366004611091565b610af1565b34801561014957600080fd5b5061015d61015836600461106f565b610bdf565b6040805197151588526001600160a01b039687166020890152941515948701949094526060860192909252608085015260a08401521660c082015260e0016100f4565b3480156101ac57600080fd5b5061009e6101bb366004611100565b610d66565b3480156101cc57600080fd5b506000546100e0906001600160a01b031681565b3480156101ec57600080fd5b5061009e6101fb36600461106f565b610e84565b6001600160a01b03831661022f5760405162461bcd60e51b8152600401610226906111de565b60405180910390fd5b6001600160a01b03831660009081526001602081905260409091205460ff161515146102945760405162461bcd60e51b815260206004820152601460248201527344697370656e736572206e6f742061637469766560601b6044820152606401610226565b600082116102da5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081e995c9bc8185b5bdd5b9d606a1b6044820152606401610226565b6001600160a01b038316600090815260016020819052604090912001548211156103385760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610226565b6001600160a01b0383811660009081526001602052604090206003015416156103d9576001600160a01b038381166000908152600160205260409020600301541633146103d95760405162461bcd60e51b815260206004820152602960248201527f546869732061646472657373206973206e6f7420616c6c6f77656420746f2072604482015268195c5d595cdd08111560ba1b6064820152608401610226565b6040516370a0823160e01b81526001600160a01b03828116600483015284916000918316906370a082319060240160206040518083038186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045791906111c5565b6001600160a01b03861660009081526001602052604090206002015490915081106104c45760405162461bcd60e51b815260206004820152601760248201527f43616c6c65722062616c616e636520746f6f20686967680000000000000000006044820152606401610226565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053e91906111c5565b905084811080156105c157506040516355138f0d60e11b81523060048201526001600160a01b0384169063aa271e1a9060240160206040518083038186803b15801561058957600080fd5b505afa15801561059d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c1919061118a565b156106b8576001600160a01b0383166340c10f19306105e08489611215565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561062657600080fd5b505af115801561063a573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b03861692506370a08231915060240160206040518083038186803b15801561067d57600080fd5b505afa158015610691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b591906111c5565b90505b848110156106fe5760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820726573657276657360681b6044820152606401610226565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820187905284169063a9059cbb90604401602060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610780919061118a565b50836001600160a01b0316866001600160a01b03167f63e223ff524bd93d4cbff98ef34405b39f63ded87f5a8d85e39ccda966f13543876040516107c691815260200190565b60405180910390a3505050505050565b6000546001600160a01b031633146108295760405162461bcd60e51b81526020600482015260166024820152752234b9b832b739b2b91d1037b7363c903937baba32b960511b6044820152606401610226565b6001600160a01b03851661084f5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b03858116600090815260016020526040902054610100900416158061089c57506001600160a01b0385811660009081526001602052604090205461010090048116908316145b6108e85760405162461bcd60e51b815260206004820152601960248201527f44617461546f6b656e20616c72656164792063726561746564000000000000006044820152606401610226565b6001600160a01b0380861660008181526001602081905260408083208054888716610100026001600160a81b031990911617831781558083018a905560028082018a9055600390910180549688166001600160a01b03199788161790558054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180549094168317909355915190917fac48b6054eb35d754b0a0caef06fbe1d535bd54250f6e10e3a813f057665910491a2806001600160a01b0316856001600160a01b03167fac5c7317d52e88de62aff4ba6869a4882a4556557b761158934d2fd32a8b2ca560405160405180910390a35050505050565b600281815481106109fa57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038116610a3a5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038181166000908152600160205260409020546101009004163314610aa85760405162461bcd60e51b815260206004820152601b60248201527f44617461546f6b656e20616c72656164792061637469766174656400000000006044820152606401610226565b6001600160a01b038116600081815260016020526040808220805460ff19169055517f393f01061139648745ea000bb047bbe1785bd3a19d3a9c90f6747e1d2357d2b89190a250565b6001600160a01b038216610b175760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038281166000908152600160205260409020546101009004163314610b855760405162461bcd60e51b815260206004820152601b60248201527f44617461546f6b656e20616c72656164792061637469766174656400000000006044820152606401610226565b6001600160a01b0382811660008181526001602052604080822060030180546001600160a01b0319169486169485179055517fac5c7317d52e88de62aff4ba6869a4882a4556557b761158934d2fd32a8b2ca59190a35050565b60008080808080806001600160a01b038816610c0d5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b0388811660008181526001602081905260409182902080549181015460029091015492516370a0823160e01b815230600482015260ff83169c506101009092049094169950929650945089916370a082319060240160206040518083038186803b158015610c8157600080fd5b505afa158015610c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb991906111c5565b6040516355138f0d60e11b81523060048201529093506001600160a01b0382169063aa271e1a9060240160206040518083038186803b158015610cfb57600080fd5b505afa158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d33919061118a565b6001600160a01b03998a16600090815260016020526040902060030154989a979990989597949650929490921692915050565b6001600160a01b038316610d8c5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038381166000908152600160205260409020546101009004163314610dea5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21037bbb732b960991b6044820152606401610226565b6001600160a01b0383166000818152600160208190526040808320805460ff19168317815580830187905560029081018690558054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517fe9372084cb52c5392afee4b9d79d131e04b1e65676088d50a8f39fffb16a87459190a2505050565b6001600160a01b038116610eaa5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038181166000908152600160205260409020546101009004163314610f085760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21037bbb732b960991b6044820152606401610226565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015610f4c57600080fd5b505afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8491906111c5565b9050801561104e5760405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610fd457600080fd5b505af1158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100c919061118a565b5060405181815233906001600160a01b038516907f03185212530fcdce6b38fbf62ed27ab29b1b047f59b76b17401388a70a95f41b9060200160405180910390a35b505050565b80356001600160a01b038116811461106a57600080fd5b919050565b60006020828403121561108157600080fd5b61108a82611053565b9392505050565b600080604083850312156110a457600080fd5b6110ad83611053565b91506110bb60208401611053565b90509250929050565b6000806000606084860312156110d957600080fd5b6110e284611053565b9250602084013591506110f760408501611053565b90509250925092565b60008060006060848603121561111557600080fd5b61111e84611053565b95602085013595506040909401359392505050565b600080600080600060a0868803121561114b57600080fd5b61115486611053565b9450602086013593506040860135925061117060608701611053565b915061117e60808701611053565b90509295509295909350565b60006020828403121561119c57600080fd5b8151801515811461108a57600080fd5b6000602082840312156111be57600080fd5b5035919050565b6000602082840312156111d757600080fd5b5051919050565b6020808252601e908201527f496e76616c696420746f6b656e20636f6e747261637420616464726573730000604082015260600190565b60008282101561123557634e487b7160e01b600052601160045260246000fd5b50039056fea2646970667358221220cec6e37c12213f9c72ebfff5d6898f0e1005fdb9960267b10f4f9352cfc6c30064736f6c63430008070033", + "deployedBytecode": "0x6080604052600436106100865760003560e01c806345d6646b1161005957806345d6646b1461011d578063645b8b1b1461013d578063938d71d0146101a0578063f887ea40146101c0578063f9bfaa7d146101e057600080fd5b80631d746d831461008b57806324ce2917146100a05780633398086a146100c05780633ea053eb146100fd575b600080fd5b61009e6100993660046110c4565b610200565b005b3480156100ac57600080fd5b5061009e6100bb366004611133565b6107d6565b3480156100cc57600080fd5b506100e06100db3660046111ac565b6109ea565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561010957600080fd5b5061009e61011836600461106f565b610a14565b34801561012957600080fd5b5061009e610138366004611091565b610af1565b34801561014957600080fd5b5061015d61015836600461106f565b610bdf565b6040805197151588526001600160a01b039687166020890152941515948701949094526060860192909252608085015260a08401521660c082015260e0016100f4565b3480156101ac57600080fd5b5061009e6101bb366004611100565b610d66565b3480156101cc57600080fd5b506000546100e0906001600160a01b031681565b3480156101ec57600080fd5b5061009e6101fb36600461106f565b610e84565b6001600160a01b03831661022f5760405162461bcd60e51b8152600401610226906111de565b60405180910390fd5b6001600160a01b03831660009081526001602081905260409091205460ff161515146102945760405162461bcd60e51b815260206004820152601460248201527344697370656e736572206e6f742061637469766560601b6044820152606401610226565b600082116102da5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081e995c9bc8185b5bdd5b9d606a1b6044820152606401610226565b6001600160a01b038316600090815260016020819052604090912001548211156103385760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b6044820152606401610226565b6001600160a01b0383811660009081526001602052604090206003015416156103d9576001600160a01b038381166000908152600160205260409020600301541633146103d95760405162461bcd60e51b815260206004820152602960248201527f546869732061646472657373206973206e6f7420616c6c6f77656420746f2072604482015268195c5d595cdd08111560ba1b6064820152608401610226565b6040516370a0823160e01b81526001600160a01b03828116600483015284916000918316906370a082319060240160206040518083038186803b15801561041f57600080fd5b505afa158015610433573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045791906111c5565b6001600160a01b03861660009081526001602052604090206002015490915081106104c45760405162461bcd60e51b815260206004820152601760248201527f43616c6c65722062616c616e636520746f6f20686967680000000000000000006044820152606401610226565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b15801561050657600080fd5b505afa15801561051a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053e91906111c5565b905084811080156105c157506040516355138f0d60e11b81523060048201526001600160a01b0384169063aa271e1a9060240160206040518083038186803b15801561058957600080fd5b505afa15801561059d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c1919061118a565b156106b8576001600160a01b0383166340c10f19306105e08489611215565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561062657600080fd5b505af115801561063a573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b03861692506370a08231915060240160206040518083038186803b15801561067d57600080fd5b505afa158015610691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b591906111c5565b90505b848110156106fe5760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820726573657276657360681b6044820152606401610226565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820187905284169063a9059cbb90604401602060405180830381600087803b15801561074857600080fd5b505af115801561075c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610780919061118a565b50836001600160a01b0316866001600160a01b03167f63e223ff524bd93d4cbff98ef34405b39f63ded87f5a8d85e39ccda966f13543876040516107c691815260200190565b60405180910390a3505050505050565b6000546001600160a01b031633146108295760405162461bcd60e51b81526020600482015260166024820152752234b9b832b739b2b91d1037b7363c903937baba32b960511b6044820152606401610226565b6001600160a01b03851661084f5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b03858116600090815260016020526040902054610100900416158061089c57506001600160a01b0385811660009081526001602052604090205461010090048116908316145b6108e85760405162461bcd60e51b815260206004820152601960248201527f44617461546f6b656e20616c72656164792063726561746564000000000000006044820152606401610226565b6001600160a01b0380861660008181526001602081905260408083208054888716610100026001600160a81b031990911617831781558083018a905560028082018a9055600390910180549688166001600160a01b03199788161790558054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180549094168317909355915190917fac48b6054eb35d754b0a0caef06fbe1d535bd54250f6e10e3a813f057665910491a2806001600160a01b0316856001600160a01b03167fac5c7317d52e88de62aff4ba6869a4882a4556557b761158934d2fd32a8b2ca560405160405180910390a35050505050565b600281815481106109fa57600080fd5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b038116610a3a5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038181166000908152600160205260409020546101009004163314610aa85760405162461bcd60e51b815260206004820152601b60248201527f44617461546f6b656e20616c72656164792061637469766174656400000000006044820152606401610226565b6001600160a01b038116600081815260016020526040808220805460ff19169055517f393f01061139648745ea000bb047bbe1785bd3a19d3a9c90f6747e1d2357d2b89190a250565b6001600160a01b038216610b175760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038281166000908152600160205260409020546101009004163314610b855760405162461bcd60e51b815260206004820152601b60248201527f44617461546f6b656e20616c72656164792061637469766174656400000000006044820152606401610226565b6001600160a01b0382811660008181526001602052604080822060030180546001600160a01b0319169486169485179055517fac5c7317d52e88de62aff4ba6869a4882a4556557b761158934d2fd32a8b2ca59190a35050565b60008080808080806001600160a01b038816610c0d5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b0388811660008181526001602081905260409182902080549181015460029091015492516370a0823160e01b815230600482015260ff83169c506101009092049094169950929650945089916370a082319060240160206040518083038186803b158015610c8157600080fd5b505afa158015610c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb991906111c5565b6040516355138f0d60e11b81523060048201529093506001600160a01b0382169063aa271e1a9060240160206040518083038186803b158015610cfb57600080fd5b505afa158015610d0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d33919061118a565b6001600160a01b03998a16600090815260016020526040902060030154989a979990989597949650929490921692915050565b6001600160a01b038316610d8c5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038381166000908152600160205260409020546101009004163314610dea5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21037bbb732b960991b6044820152606401610226565b6001600160a01b0383166000818152600160208190526040808320805460ff19168317815580830187905560029081018690558054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055517fe9372084cb52c5392afee4b9d79d131e04b1e65676088d50a8f39fffb16a87459190a2505050565b6001600160a01b038116610eaa5760405162461bcd60e51b8152600401610226906111de565b6001600160a01b038181166000908152600160205260409020546101009004163314610f085760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21037bbb732b960991b6044820152606401610226565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b158015610f4c57600080fd5b505afa158015610f60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8491906111c5565b9050801561104e5760405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b158015610fd457600080fd5b505af1158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100c919061118a565b5060405181815233906001600160a01b038516907f03185212530fcdce6b38fbf62ed27ab29b1b047f59b76b17401388a70a95f41b9060200160405180910390a35b505050565b80356001600160a01b038116811461106a57600080fd5b919050565b60006020828403121561108157600080fd5b61108a82611053565b9392505050565b600080604083850312156110a457600080fd5b6110ad83611053565b91506110bb60208401611053565b90509250929050565b6000806000606084860312156110d957600080fd5b6110e284611053565b9250602084013591506110f760408501611053565b90509250925092565b60008060006060848603121561111557600080fd5b61111e84611053565b95602085013595506040909401359392505050565b600080600080600060a0868803121561114b57600080fd5b61115486611053565b9450602086013593506040860135925061117060608701611053565b915061117e60808701611053565b90509295509295909350565b60006020828403121561119c57600080fd5b8151801515811461108a57600080fd5b6000602082840312156111be57600080fd5b5035919050565b6000602082840312156111d757600080fd5b5051919050565b6020808252601e908201527f496e76616c696420746f6b656e20636f6e747261637420616464726573730000604082015260600190565b60008282101561123557634e487b7160e01b600052601160045260246000fd5b50039056fea2646970667358221220cec6e37c12213f9c72ebfff5d6898f0e1005fdb9960267b10f4f9352cfc6c30064736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/abis/ERC20.json b/abis/ERC20.json new file mode 100644 index 0000000..7d3e3e9 --- /dev/null +++ b/abis/ERC20.json @@ -0,0 +1,225 @@ +{ + "contractName": "ERC20", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "decimals", + "outputs": [ + { + "name": "", + "type": "uint8" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "symbol", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "from", + "type": "address" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": false, + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + } + ] + } \ No newline at end of file diff --git a/abis/ERC20Roles.json b/abis/ERC20Roles.json new file mode 100644 index 0000000..0e430d1 --- /dev/null +++ b/abis/ERC20Roles.json @@ -0,0 +1,204 @@ + +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC20Roles", + "sourceName": "contracts/utils/ERC20Roles.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedFeeManager", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedMinter", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "CleanedPermissions", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedFeeManager", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedMinter", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "authERC20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "permissions", + "outputs": [ + { + "internalType": "bool", + "name": "minter", + "type": "bool" + }, + { + "internalType": "bool", + "name": "feeManager", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50610157806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301e882081461003b578063ef867ff414610083575b600080fd5b6100676100493660046100d8565b60006020819052908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b610096610091366004610108565b6100ae565b6040516001600160a01b03909116815260200161007a565b600181815481106100be57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000602082840312156100ea57600080fd5b81356001600160a01b038116811461010157600080fd5b9392505050565b60006020828403121561011a57600080fd5b503591905056fea26469706673582212208b39415173b3f678559d83bbb56ee8b4f17b6bd1c999526ee00defa21731a4cc64736f6c63430008070033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806301e882081461003b578063ef867ff414610083575b600080fd5b6100676100493660046100d8565b60006020819052908152604090205460ff8082169161010090041682565b6040805192151583529015156020830152015b60405180910390f35b610096610091366004610108565b6100ae565b6040516001600160a01b03909116815260200161007a565b600181815481106100be57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000602082840312156100ea57600080fd5b81356001600160a01b038116811461010157600080fd5b9392505050565b60006020828403121561011a57600080fd5b503591905056fea26469706673582212208b39415173b3f678559d83bbb56ee8b4f17b6bd1c999526ee00defa21731a4cc64736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/abis/ERC721RolesAddress.json b/abis/ERC721RolesAddress.json new file mode 100644 index 0000000..0765388 --- /dev/null +++ b/abis/ERC721RolesAddress.json @@ -0,0 +1,422 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ERC721RolesAddress", + "sourceName": "contracts/utils/ERC721RolesAddress.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedManager", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedTo725StoreList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedToCreateERC20List", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "AddedToMetadataList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "CleanedPermissions", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedFrom725StoreList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedFromCreateERC20List", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedFromMetadataList", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "RemovedManager", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "addTo725StoreList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "addToCreateERC20List", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "addToMetadataList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "auth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getPermissions", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "manager", + "type": "bool" + }, + { + "internalType": "bool", + "name": "deployERC20", + "type": "bool" + }, + { + "internalType": "bool", + "name": "updateMetadata", + "type": "bool" + }, + { + "internalType": "bool", + "name": "store", + "type": "bool" + } + ], + "internalType": "struct ERC721RolesAddress.Roles", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "removeFrom725StoreList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "removeFromCreateERC20List", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_allowedAddress", + "type": "address" + } + ], + "name": "removeFromMetadataList", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061090f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063431053ac1161005b578063431053ac1461019f5780634a63740a146101b2578063b0c41ead146101c5578063fe1ec880146101f057600080fd5b806310c558bf1461008d578063160a7925146100a257806319c186e514610179578063273e06b31461018c575b600080fd5b6100a061009b366004610859565b610203565b005b6101356100b0366004610859565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b0316600090815260208181526040918290208251608081018452905460ff808216151583526101008204811615159383019390935262010000810483161515938201939093526301000000909204161515606082015290565b604051610170919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b60405180910390f35b6100a0610187366004610859565b6102f0565b6100a061019a366004610859565b6103ca565b6100a06101ad366004610859565b6104fc565b6100a06101c0366004610859565b61062d565b6101d86101d3366004610889565b610703565b6040516001600160a01b039091168152602001610170565b6100a06101fe366004610859565b61072d565b3360009081526020819052604090205460ff1615156001146102405760405162461bcd60e51b8152600401610237906108a2565b60405180910390fd5b6001600160a01b038116600081815260208190526040808220805462ff000019166201000017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa4906102e49042904390918252602082015260400190565b60405180910390a35050565b3360009081526020819052604090205460ff1615156001146103245760405162461bcd60e51b8152600401610237906108a2565b6001600160a01b038116600081815260208190526040808220805463ff0000001916630100000017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee906102e49042904390918252602082015260400190565b3360009081526020819052604090205460ff1615156001148061041b5750336001600160a01b03821614801561041b5750336000908152602081905260409020546301000000900460ff1615156001145b1561047f576001600160a01b03811660008181526020818152604091829020805463ff000000191681558251428152439281019290925292339290917fc929b18b08ffea86a1f95e29384dbe8968f2fcbd70cfd735df3aba1cc548cbf391016102e4565b60405162461bcd60e51b815260206004820152604660248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2037323553746f6064820152651c99531a5cdd60d21b608482015260a401610237565b3360009081526020819052604090205460ff1615156001148061054c5750336001600160a01b03821614801561054c57503360009081526020819052604090205462010000900460ff1615156001145b156105af576001600160a01b03811660008181526020818152604091829020805462ff0000191681558251428152439281019290925292339290917f9b41e1311fa819e825bc77fa2568492112e15ea92d173f3f8ee1c8ec3c1c562b91016102e4565b60405162461bcd60e51b815260206004820152604760248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d206d65746164616064820152661d18481b1a5cdd60ca1b608482015260a401610237565b3360009081526020819052604090205460ff1615156001146106615760405162461bcd60e51b8152600401610237906108a2565b6001600160a01b038116600081815260208190526040808220805461ff00191661010017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f906102e49042904390918252602082015260400190565b6001818154811061071357600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526020819052604090205460ff1615156001148061077d5750336001600160a01b03821614801561077d57503360009081526020819052604090205460ff6101009091041615156001145b156107df576001600160a01b03811660008181526020818152604091829020805461ff00191681558251428152439281019290925292339290917f59bd33f4c27cc16a2d74450e1fa43d7896020be9aecea4bee009db9294de899791016102e4565b60405162461bcd60e51b815260206004820152604360248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2045524332304c6064820152621a5cdd60ea1b608482015260a401610237565b60006020828403121561086b57600080fd5b81356001600160a01b038116811461088257600080fd5b9392505050565b60006020828403121561089b57600080fd5b5035919050565b6020808252601f908201527f455243373231526f6c6573416464726573733a204e4f54204d414e414745520060408201526060019056fea2646970667358221220248218b22aec91e387c93ed97ce3e042c3ec436875947fa77390c9eaed3129ec64736f6c63430008070033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063431053ac1161005b578063431053ac1461019f5780634a63740a146101b2578063b0c41ead146101c5578063fe1ec880146101f057600080fd5b806310c558bf1461008d578063160a7925146100a257806319c186e514610179578063273e06b31461018c575b600080fd5b6100a061009b366004610859565b610203565b005b6101356100b0366004610859565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b0316600090815260208181526040918290208251608081018452905460ff808216151583526101008204811615159383019390935262010000810483161515938201939093526301000000909204161515606082015290565b604051610170919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b60405180910390f35b6100a0610187366004610859565b6102f0565b6100a061019a366004610859565b6103ca565b6100a06101ad366004610859565b6104fc565b6100a06101c0366004610859565b61062d565b6101d86101d3366004610889565b610703565b6040516001600160a01b039091168152602001610170565b6100a06101fe366004610859565b61072d565b3360009081526020819052604090205460ff1615156001146102405760405162461bcd60e51b8152600401610237906108a2565b60405180910390fd5b6001600160a01b038116600081815260208190526040808220805462ff000019166201000017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa4906102e49042904390918252602082015260400190565b60405180910390a35050565b3360009081526020819052604090205460ff1615156001146103245760405162461bcd60e51b8152600401610237906108a2565b6001600160a01b038116600081815260208190526040808220805463ff0000001916630100000017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee906102e49042904390918252602082015260400190565b3360009081526020819052604090205460ff1615156001148061041b5750336001600160a01b03821614801561041b5750336000908152602081905260409020546301000000900460ff1615156001145b1561047f576001600160a01b03811660008181526020818152604091829020805463ff000000191681558251428152439281019290925292339290917fc929b18b08ffea86a1f95e29384dbe8968f2fcbd70cfd735df3aba1cc548cbf391016102e4565b60405162461bcd60e51b815260206004820152604660248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2037323553746f6064820152651c99531a5cdd60d21b608482015260a401610237565b3360009081526020819052604090205460ff1615156001148061054c5750336001600160a01b03821614801561054c57503360009081526020819052604090205462010000900460ff1615156001145b156105af576001600160a01b03811660008181526020818152604091829020805462ff0000191681558251428152439281019290925292339290917f9b41e1311fa819e825bc77fa2568492112e15ea92d173f3f8ee1c8ec3c1c562b91016102e4565b60405162461bcd60e51b815260206004820152604760248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d206d65746164616064820152661d18481b1a5cdd60ca1b608482015260a401610237565b3360009081526020819052604090205460ff1615156001146106615760405162461bcd60e51b8152600401610237906108a2565b6001600160a01b038116600081815260208190526040808220805461ff00191661010017815560018054808201825593527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690920180546001600160a01b0319168417905551909133917f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f906102e49042904390918252602082015260400190565b6001818154811061071357600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526020819052604090205460ff1615156001148061077d5750336001600160a01b03821614801561077d57503360009081526020819052604090205460ff6101009091041615156001145b156107df576001600160a01b03811660008181526020818152604091829020805461ff00191681558251428152439281019290925292339290917f59bd33f4c27cc16a2d74450e1fa43d7896020be9aecea4bee009db9294de899791016102e4565b60405162461bcd60e51b815260206004820152604360248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2045524332304c6064820152621a5cdd60ea1b608482015260a401610237565b60006020828403121561086b57600080fd5b81356001600160a01b038116811461088257600080fd5b9392505050565b60006020828403121561089b57600080fd5b5035919050565b6020808252601f908201527f455243373231526f6c6573416464726573733a204e4f54204d414e414745520060408201526060019056fea2646970667358221220248218b22aec91e387c93ed97ce3e042c3ec436875947fa77390c9eaed3129ec64736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/schema.graphql b/schema.graphql index 135d875..166d92f 100644 --- a/schema.graphql +++ b/schema.graphql @@ -19,7 +19,7 @@ type Token @entity { holderCount: BigInt # Number of addresses holding a balance of datatoken orderCount: BigInt # Number of orders executed for this datatoken - createTime: Int # Block time datatoken was created + createdTimestamp: Int # Block time datatoken was created tx: Bytes # Datatoken creation transaction id block: Int # Block number when it was created } @@ -46,7 +46,7 @@ type Nft @entity{ metadataRole: [String!] # addresses that can update the metadata template: String! # template address - createTime: Int! # Block time pool was created + createdTimestamp: Int! # Block time pool was created tx: Bytes # Pool creation transaction id block: Int # Block number when it was created } @@ -84,7 +84,7 @@ type Pool @entity { swapCount: BigInt! transactionCount: BigInt! # Number of transactions in this pool involving liquidity changes - createTime: Int! # Block time pool was created + createdTimestamp: Int! # Block time pool was created tx: Bytes # Pool creation transaction id block: Int # Block number when it was created @@ -127,7 +127,7 @@ type PoolTransaction @entity { tx: Bytes! event: String block: Int! - timestamp: Int! + createdTimestamp: Int! gasUsed: BigDecimal! gasPrice: BigDecimal! @@ -154,7 +154,7 @@ type Order @entity { # renamed from Toke consumerMarketToken: Token # consumerMarketAmmount: BigDecimal #call contract to get fee ammount - timestamp: Int! + createdTimestamp: Int! tx: Bytes block: Int! } @@ -169,7 +169,7 @@ type TokenTransaction @entity { block: Int! gasUsed: BigDecimal! gasPrice: BigDecimal! - timestamp: Int! + createdTimestamp: Int! tx: Bytes! } @@ -192,29 +192,33 @@ type FixedRateExchange @entity { active: Boolean! totalSwapValue: BigDecimal! # amount of total basetokens spent allowedSwapper: String # address that is allowed to swap tokens - supply: Int! + supply: BigInt! withMint: Boolean # if the owner allowes the fre to mint isMinter: Boolean # if the fre has the minter role on the datatoken updates: [FixedRateExchangeUpdate!] @derivedFrom(field: "exchangeId") swaps: [FixedRateExchangeSwap!] @derivedFrom(field: "exchangeId") + + createdTimestamp: Int! + tx: Bytes + block: Int! } type FixedRateExchangeUpdate @entity { id: ID! exchangeId: FixedRateExchange! - oldPrice: BigDecimal! - newPrice: BigDecimal! + oldPrice: BigDecimal + newPrice: BigDecimal - oldActive: Boolean! - newActive: Boolean! + oldActive: Boolean + newActive: Boolean oldAllowedSwapper: String newAllowedSwapper: String block: Int! - timestamp: Int! + createdTimestamp: Int! tx: Bytes! } @@ -225,7 +229,7 @@ type FixedRateExchangeSwap @entity { baseTokenAmount: BigDecimal! dataTokenAmount: BigDecimal! block: Int! - timestamp: Int! + createdTimestamp: Int! tx: Bytes! } @@ -237,6 +241,7 @@ type Dispenser @entity { owner: User! datatoken: Token! + allowedSwapper: String withMint: Boolean # if the owner allowes the fre to mint isMinter: Boolean # if the fre has the minter role on the datatoken maxTokens: BigDecimal! # max tokens that can be dispensed @@ -247,14 +252,13 @@ type Dispenser @entity { } type DispenserTransaction @entity { - id: ID! + id: ID! dispenser: Dispenser! - datatoken: Token! user: User! amount: BigDecimal! block: Int! - timestamp: Int! + createdTimestamp: Int! tx: Bytes! } @@ -264,7 +268,7 @@ type PoolSnapshot @entity { totalShares: BigDecimal! swapVolume: BigDecimal! # swap value 24h swapFees: BigDecimal! # swap fee value 24h - timestamp: Int! # date without time + createdTimestamp: Int! # date without time spotPrice: BigDecimal! # TODO: last spot price or first one? tokens: [PoolSnapshotTokenValue!] @derivedFrom(field: "poolSnapshot") } @@ -300,6 +304,6 @@ type MetadataUpdate @entity { userAddress: String! block: Int! - timestamp: Int! + createdTimestamp: Int! tx: Bytes! } diff --git a/src/mappings/erc20Template.ts b/src/mappings/dataToken.ts similarity index 87% rename from src/mappings/erc20Template.ts rename to src/mappings/dataToken.ts index 3783afc..34d77c3 100644 --- a/src/mappings/erc20Template.ts +++ b/src/mappings/dataToken.ts @@ -2,7 +2,7 @@ import { MinterApproved, OrderStarted } from '../@types/ERC20Template/ERC20Template' -// TODO: no events in contracts +// TODO: no events in contracts , it's ok !! export function handleMinterApproved(event: MinterApproved): void {} // TODO: to complicated at this point, return after basic events implemented ¯\_(ツ)_/¯ diff --git a/src/mappings/dispenser.ts b/src/mappings/dispenser.ts new file mode 100644 index 0000000..b41c1de --- /dev/null +++ b/src/mappings/dispenser.ts @@ -0,0 +1,65 @@ +import { + DispenserActivated, + DispenserAllowedSwapperChanged, + DispenserDeactivated, + OwnerWithdrawed, + TokensDispensed +} from '../@types/Dispenser/Dispenser' +import { DispenserCreated } from '../@types/ERC721Factory/ERC721Factory' +import { DispenserTransaction } from '../@types/schema' +import { ZERO_BD } from '../helpers' +import { createDispenser, getDispenser } from './utils/dispenserUtils' +import { getUser } from './utils/userUtils' + +export function handleNewDispenser(event: DispenserCreated): void { + createDispenser(event.params.datatokenAddress.toHex()) +} + +export function handleActivate(event: DispenserActivated): void { + const dispenser = getDispenser(event.params.datatokenAddress.toHex()) + dispenser.active = true + dispenser.save() +} + +export function handleDeactivate(event: DispenserDeactivated): void { + const dispenser = getDispenser(event.params.datatokenAddress.toHex()) + dispenser.active = true + dispenser.save() +} + +export function handleAllowedSwapperChanged( + event: DispenserAllowedSwapperChanged +): void { + const dispenser = getDispenser(event.params.datatoken.toHex()) + dispenser.allowedSwapper = event.params.newAllowedSwapper.toHex() + dispenser.save() +} + +export function handleTokensDispensed(event: TokensDispensed): void { + const id = event.transaction.hash + .toHexString() + .concat('-') + .concat(event.params.datatokenAddress.toHexString()) + + const dispenserTransaction = new DispenserTransaction(id) + const dispenser = getDispenser(event.params.datatokenAddress.toHex()) + dispenser.balance = dispenser.balance.minus( + event.params.amount.toBigDecimal() + ) + dispenser.save() + + dispenserTransaction.dispenser = dispenser.id + const user = getUser(event.params.userAddress.toHex()) + dispenserTransaction.user = user.id + + dispenserTransaction.createdTimestamp = event.block.timestamp.toI32() + dispenserTransaction.tx = event.transaction.hash + dispenserTransaction.block = event.block.number.toI32() + dispenserTransaction.save() +} + +export function handleOwnerWinthdraw(event: OwnerWithdrawed): void { + const dispenser = getDispenser(event.params.datatoken.toHex()) + dispenser.balance = ZERO_BD + dispenser.save() +} diff --git a/src/mappings/erc721Factory.ts b/src/mappings/erc721Factory.ts index 1fff59e..f423dac 100644 --- a/src/mappings/erc721Factory.ts +++ b/src/mappings/erc721Factory.ts @@ -1,16 +1,17 @@ -import { log } from '@graphprotocol/graph-ts' import { NFTCreated, TokenCreated } from '../@types/ERC721Factory/ERC721Factory' import { Nft, Token } from '../@types/schema' import { ZERO_BD } from '../helpers' +import { getUser } from './utils/userUtils' export function handleNftCreated(event: NFTCreated): void { const nft = new Nft(event.params.newTokenAddress.toHexString()) - nft.owner = event.params.admin.toHexString() + const user = getUser(event.params.admin.toHexString()) + nft.owner = user.id nft.address = event.params.newTokenAddress.toHexString() nft.name = event.params.tokenName.toHex() nft.symbol = '' - nft.createTime = event.block.timestamp.toI32() + nft.createdTimestamp = event.block.timestamp.toI32() nft.tx = event.transaction.hash nft.block = event.block.number.toI32() @@ -21,13 +22,12 @@ export function handleNewToken(event: TokenCreated): void { const token = new Token(event.params.newTokenAddress.toHexString()) token.isDatatoken = true token.address = event.params.newTokenAddress.toHexString() - token.createTime = event.block.timestamp.toI32() + token.createdTimestamp = event.block.timestamp.toI32() token.tx = event.transaction.hash token.block = event.block.number.toI32() token.name = event.params.tokenName.toString() token.decimals = 18 token.supply = ZERO_BD - log.info('dt name {} ', [event.params.tokenName.toString()]) token.save() } diff --git a/src/mappings/factoryRouter.ts b/src/mappings/factoryRouter.ts index eb285fd..289e009 100644 --- a/src/mappings/factoryRouter.ts +++ b/src/mappings/factoryRouter.ts @@ -4,7 +4,7 @@ import { Pool } from '../@types/schema' export function handleNewPool(event: NewPool): void { const newPool = new Pool(event.params.poolAddress.toHex()) - newPool.createTime = event.block.timestamp.toI32() + newPool.createdTimestamp = event.block.timestamp.toI32() newPool.tx = event.transaction.hash newPool.block = event.block.number.toI32() newPool.save() diff --git a/src/mappings/fixedRateExchange.ts b/src/mappings/fixedRateExchange.ts index e2f1d7e..61dee61 100644 --- a/src/mappings/fixedRateExchange.ts +++ b/src/mappings/fixedRateExchange.ts @@ -1,15 +1,29 @@ import { BigInt } from '@graphprotocol/graph-ts' -import { ExchangeCreated } from '../@types/FixedRateExchange/FixedRateExchange' - -import { FixedRateExchange } from '../@types/schema' - +import { + ExchangeActivated, + ExchangeAllowedSwapperChanged, + ExchangeCreated, + ExchangeDeactivated, + ExchangeMintStateChanged, + ExchangeRateChanged, + Swapped +} from '../@types/FixedRateExchange/FixedRateExchange' +import { + FixedRateExchange, + FixedRateExchangeSwap, + FixedRateExchangeUpdate +} from '../@types/schema' import { tokenToDecimal } from '../helpers' +import { getFixedRateExchange, getUpdateOrSwapId } from './utils/fixedRateUtils' +import { getToken } from './utils/tokenUtils' +import { getUser } from './utils/userUtils' export function handleExchangeCreated(event: ExchangeCreated): void { const fixedRateExchange = new FixedRateExchange( event.params.exchangeId.toHexString() ) - fixedRateExchange.owner = event.params.exchangeOwner.toHexString() + const user = getUser(event.params.exchangeOwner.toHexString()) + fixedRateExchange.owner = user.id fixedRateExchange.datatoken = event.params.dataToken.toHexString() fixedRateExchange.baseToken = event.params.baseToken.toHexString() // fixedRateExchange.baseTokenSymbol = getTokenSymbol(event.params.baseToken) @@ -21,3 +35,144 @@ export function handleExchangeCreated(event: ExchangeCreated): void { ) fixedRateExchange.save() } + +export function handleRateChange(event: ExchangeRateChanged): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + const newExchangeUpdate = new FixedRateExchangeUpdate( + getUpdateOrSwapId( + event.transaction.hash.toHex(), + event.params.exchangeId.toHex() + ) + ) + newExchangeUpdate.oldPrice = fixedRateExchange.price + newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() + newExchangeUpdate.tx = event.transaction.hash + newExchangeUpdate.block = event.block.number.toI32() + + fixedRateExchange.price = tokenToDecimal( + event.params.newRate.toBigDecimal(), + BigInt.fromI32(18).toI32() + ) + newExchangeUpdate.newPrice = fixedRateExchange.price + + newExchangeUpdate.save() + fixedRateExchange.save() +} + +export function handleMintStateChanged(event: ExchangeMintStateChanged): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + fixedRateExchange.withMint = event.params.withMint + fixedRateExchange.save() +} + +// TODO: implement fre updates/history for changes + +export function handleActivated(event: ExchangeActivated): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + const newExchangeUpdate = new FixedRateExchangeUpdate( + getUpdateOrSwapId( + event.transaction.hash.toHex(), + event.params.exchangeId.toHex() + ) + ) + newExchangeUpdate.oldActive = fixedRateExchange.active + newExchangeUpdate.newActive = true + newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() + newExchangeUpdate.tx = event.transaction.hash + newExchangeUpdate.block = event.block.number.toI32() + + fixedRateExchange.active = true + + newExchangeUpdate.save() + fixedRateExchange.save() +} + +export function handleDeactivated(event: ExchangeDeactivated): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + const newExchangeUpdate = new FixedRateExchangeUpdate( + getUpdateOrSwapId( + event.transaction.hash.toHex(), + event.params.exchangeId.toHex() + ) + ) + newExchangeUpdate.oldActive = fixedRateExchange.active + newExchangeUpdate.newActive = false + newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() + newExchangeUpdate.tx = event.transaction.hash + newExchangeUpdate.block = event.block.number.toI32() + + fixedRateExchange.active = false + newExchangeUpdate.save() + fixedRateExchange.save() +} + +export function handleAllowedSwapperChanged( + event: ExchangeAllowedSwapperChanged +): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + const newExchangeUpdate = new FixedRateExchangeUpdate( + getUpdateOrSwapId( + event.transaction.hash.toHex(), + event.params.exchangeId.toHex() + ) + ) + + newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() + newExchangeUpdate.tx = event.transaction.hash + newExchangeUpdate.block = event.block.number.toI32() + newExchangeUpdate.oldAllowedSwapper = fixedRateExchange.allowedSwapper + + fixedRateExchange.allowedSwapper = event.params.allowedSwapper.toHex() + newExchangeUpdate.newAllowedSwapper = fixedRateExchange.allowedSwapper + newExchangeUpdate.save() + fixedRateExchange.save() +} + +// TODO: implement market fee, opf fee +export function handleSwap(event: Swapped): void { + const fixedRateExchange = getFixedRateExchange( + event.params.exchangeId.toHex() + ) + + // reduce supply if the fixed rate is not minting tokens + if (fixedRateExchange.isMinter || fixedRateExchange.withMint) { + fixedRateExchange.supply = + fixedRateExchange.supply - event.params.dataTokenSwappedAmount + } + + const swap = new FixedRateExchangeSwap( + getUpdateOrSwapId( + event.transaction.hash.toHex(), + event.params.exchangeId.toHex() + ) + ) + swap.createdTimestamp = event.block.timestamp.toI32() + swap.tx = event.transaction.hash + swap.block = event.block.number.toI32() + + swap.exchangeId = event.params.exchangeId.toHex() + swap.by = getUser(event.params.by.toHex()).id + + // we need to fetch the decimals of the base token + const baseToken = getToken(fixedRateExchange.baseToken) + swap.baseTokenAmount = tokenToDecimal( + event.params.baseTokenSwappedAmount.toBigDecimal(), + BigInt.fromI32(baseToken.decimals).toI32() + ) + swap.dataTokenAmount = tokenToDecimal( + event.params.dataTokenSwappedAmount.toBigDecimal(), + BigInt.fromI32(18).toI32() + ) + + swap.save() +} diff --git a/src/mappings/utils/dispenserUtils.ts b/src/mappings/utils/dispenserUtils.ts new file mode 100644 index 0000000..3550de8 --- /dev/null +++ b/src/mappings/utils/dispenserUtils.ts @@ -0,0 +1,17 @@ +import { Dispenser } from '../../@types/schema' +import { getToken } from './tokenUtils' + +export function createDispenser(address: string): Dispenser { + const dispenser = new Dispenser(address) + dispenser.datatoken = getToken(address).id + dispenser.save() + return dispenser +} + +export function getDispenser(address: string): Dispenser { + let dispenser = Dispenser.load(address) + if (dispenser === null) { + dispenser = createDispenser(address) + } + return dispenser +} diff --git a/src/mappings/utils/fixedRateUtils.ts b/src/mappings/utils/fixedRateUtils.ts new file mode 100644 index 0000000..9ccea6f --- /dev/null +++ b/src/mappings/utils/fixedRateUtils.ts @@ -0,0 +1,19 @@ +import { FixedRateExchange } from '../../@types/schema' + +export function getFixedRateExchange(exchangeId: string): FixedRateExchange { + let fixedRateExhange = FixedRateExchange.load(exchangeId) + if (fixedRateExhange === null) { + fixedRateExhange = new FixedRateExchange(exchangeId) + // TODO: get data from contract and fill in new fixed rate exchange + fixedRateExhange.save() + } + + return fixedRateExhange +} + +export function getUpdateOrSwapId( + txAddress: string, + exchangeId: string +): string { + return `${txAddress}-${exchangeId}` +} diff --git a/src/mappings/utils/tokenUtils.ts b/src/mappings/utils/tokenUtils.ts new file mode 100644 index 0000000..884bf62 --- /dev/null +++ b/src/mappings/utils/tokenUtils.ts @@ -0,0 +1,23 @@ +import { Address } from '@graphprotocol/graph-ts' +import { Token } from '../../@types/schema' +import { ERC20 } from '../../@types/templates/ERC20Template/ERC20' + +export function createToken(address: string): Token { + const token = new Token(address) + const contract = ERC20.bind(Address.fromString(address)) + token.name = contract.name() + token.symbol = contract.symbol() + token.address = address + token.isDatatoken = false + token.decimals = contract.decimals() + token.save() + return token +} + +export function getToken(address: string): Token { + let newToken = Token.load(address) + if (newToken === null) { + newToken = createToken(address) + } + return newToken +} diff --git a/src/mappings/utils/userUtils.ts b/src/mappings/utils/userUtils.ts new file mode 100644 index 0000000..785c48c --- /dev/null +++ b/src/mappings/utils/userUtils.ts @@ -0,0 +1,11 @@ +import { User } from '../../@types/schema' + +export function getUser(address: string): User { + let user = User.load(address) + if (user === null) { + user = new User(address) + user.save() + } + + return user +} diff --git a/subgraph.yaml b/subgraph.yaml index c842ec4..e0c24a5 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -46,6 +46,18 @@ dataSources: eventHandlers: - event: ExchangeCreated(indexed bytes32,indexed address,indexed address,address,uint256) handler: handleExchangeCreated + - event: ExchangeRateChanged(indexed bytes32,indexed address,uint256) + handler: handleRateChange + - event: ExchangeMintStateChanged(indexed bytes32,indexed address,bool) + handler: handleMintStateChanged + - event: ExchangeActivated(indexed bytes32,indexed address) + handler: handleActivated + - event: ExchangeDeactivated(indexed bytes32,indexed address) + handler: handleDeactivated + - event: ExchangeAllowedSwapperChanged(indexed bytes32,indexed address) + handler: handleAllowedSwapperChanged + - event: Swapped(indexed bytes32,indexed address,uint256,uint256,address,uint256,uint256) + handler: handleSwap - kind: ethereum/contract name: FactoryRouter network: barge @@ -66,6 +78,36 @@ dataSources: eventHandlers: - event: NewPool(indexed address,bool) handler: handleNewPool + - kind: ethereum/contract + name: Dispenser + network: barge + source: + address: '0xb119b8895801111ff323ba63a77D4Fe78ED057a5' + abi: Dispenser + startBlock: 0 + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: ./src/mappings/dispenser.ts + entities: + - Dispenser + abis: + - name: Dispenser + file: ./abis/Dispenser.json + eventHandlers: + - event: DispenserCreated(indexed address) + handler: handleNewDispenser + - event: DispenserActivated(indexed address) + handler: handleActivate + - event: DispenserDeactivated(indexed address) + handler: handleDeactivate + - event: DispenserAllowedSwapperChanged(indexed address,indexed address) + handler: handleAllowedSwapperChanged + - event: TokensDispensed(indexed address,indexed address,uint256) + handler: handleTokensDispensed + - event: OwnerWithdrawed(indexed address,indexed address,uint256) + handler: handleOwnerWinthdraw templates: - name: ERC20Template kind: ethereum/contract @@ -82,6 +124,8 @@ templates: abis: - name: ERC20Template file: ./abis/ERC20Template.json + - name: ERC20 + file: ./abis/ERC20.json eventHandlers: - event: OrderStarted(indexed address,address,uint256,uint256,uint256,indexed address,indexed address,uint256) handler: handleOrderStarted