diff --git a/BiatecTokensApi/ABI/BiatecToken.json b/BiatecTokensApi/ABI/BiatecToken.json
deleted file mode 100644
index 548167e..0000000
--- a/BiatecTokensApi/ABI/BiatecToken.json
+++ /dev/null
@@ -1,626 +0,0 @@
-{
- "_format": "hh-sol-artifact-1",
- "contractName": "BiatecToken",
- "sourceName": "contracts/BiatecToken.sol",
- "abi": [
- {
- "inputs": [
- {
- "internalType": "string",
- "name": "name",
- "type": "string"
- },
- {
- "internalType": "string",
- "name": "symbol",
- "type": "string"
- },
- {
- "internalType": "uint8",
- "name": "decimals_",
- "type": "uint8"
- },
- {
- "internalType": "uint256",
- "name": "initialSupply",
- "type": "uint256"
- },
- {
- "internalType": "address",
- "name": "initialSupplyReceiver",
- "type": "address"
- }
- ],
- "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": [],
- "name": "EnforcedPause",
- "type": "error"
- },
- {
- "inputs": [],
- "name": "ExpectedPause",
- "type": "error"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- }
- ],
- "name": "OwnableInvalidOwner",
- "type": "error"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "OwnableUnauthorizedAccount",
- "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": "value",
- "type": "uint256"
- }
- ],
- "name": "Approval",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "newMinter",
- "type": "address"
- }
- ],
- "name": "MinterAdded",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "removedMinter",
- "type": "address"
- }
- ],
- "name": "MinterRemoved",
- "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": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Paused",
- "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": "value",
- "type": "uint256"
- }
- ],
- "name": "Transfer",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": false,
- "internalType": "address",
- "name": "account",
- "type": "address"
- }
- ],
- "name": "Unpaused",
- "type": "event"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "newMinter",
- "type": "address"
- }
- ],
- "name": "addMinter",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "owner",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- }
- ],
- "name": "allowance",
- "outputs": [
- {
- "internalType": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "spender",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "type": "uint256"
- }
- ],
- "name": "approve",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "account",
- "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": "from",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "burnFrom",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "decimals",
- "outputs": [
- {
- "internalType": "uint8",
- "name": "",
- "type": "uint8"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address[]",
- "name": "possibleMinters",
- "type": "address[]"
- }
- ],
- "name": "listMinters",
- "outputs": [
- {
- "internalType": "address[]",
- "name": "",
- "type": "address[]"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "mint",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "name": "minters",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "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": "pause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "paused",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "minterToRemove",
- "type": "address"
- }
- ],
- "name": "removeMinter",
- "outputs": [],
- "stateMutability": "nonpayable",
- "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": "uint256",
- "name": "",
- "type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "value",
- "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": "value",
- "type": "uint256"
- }
- ],
- "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"
- },
- {
- "inputs": [],
- "name": "unpause",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- }
- ],
- "bytecode": "0x60806040523480156200001157600080fd5b5060405162001692380380620016928339810160408190526200003491620003df565b33858560036200004583826200051d565b5060046200005482826200051d565b50506005805460ff19169055506001600160a01b0381166200009157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200009c816200010c565b506005805460ff60a81b1916600160a81b60ff861602179055336000908152600660205260409020805460ff191660011790558115620001015760006001600160a01b03821615620000ef5781620000f1565b335b9050620000ff818462000166565b505b505050505062000611565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001925760405163ec442f0560e01b81526000600482015260240162000088565b620001a060008383620001a4565b5050565b620001ae620001c0565b620001bb838383620001e7565b505050565b60055460ff1615620001e55760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b038316620002165780600260008282546200020a9190620005e9565b909155506200028a9050565b6001600160a01b038316600090815260208190526040902054818110156200026b5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000088565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620002a857600280548290039055620002c7565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200030d91815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200034257600080fd5b81516001600160401b03808211156200035f576200035f6200031a565b604051601f8301601f19908116603f011681019082821181831017156200038a576200038a6200031a565b81604052838152602092508683858801011115620003a757600080fd5b600091505b83821015620003cb5785820183015181830184015290820190620003ac565b600093810190920192909252949350505050565b600080600080600060a08688031215620003f857600080fd5b85516001600160401b03808211156200041057600080fd5b6200041e89838a0162000330565b965060208801519150808211156200043557600080fd5b50620004448882890162000330565b945050604086015160ff811681146200045c57600080fd5b6060870151608088015191945092506001600160a01b03811681146200048157600080fd5b809150509295509295909350565b600181811c90821680620004a457607f821691505b602082108103620004c557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bb57600081815260208120601f850160051c81016020861015620004f45750805b601f850160051c820191505b81811015620005155782815560010162000500565b505050505050565b81516001600160401b038111156200053957620005396200031a565b62000551816200054a84546200048f565b84620004cb565b602080601f831160018114620005895760008415620005705750858301515b600019600386901b1c1916600185901b17855562000515565b600085815260208120601f198616915b82811015620005ba5788860151825594840194600190910190840162000599565b5085821015620005d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200060b57634e487b7160e01b600052601160045260246000fd5b92915050565b61107180620006216000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063983b2d561161007c578063983b2d5614610297578063a9059cbb146102aa578063d4e64c54146102bd578063dd62ed3e146102dd578063f2fde38b14610316578063f46eccc41461032957600080fd5b8063715018a61461024357806379cc67901461024b5780638456cb591461025e5780638da5cb5b1461026657806395d89b411461028f57600080fd5b8063313ce5671161010a578063313ce567146101c25780633f4ba83a146101e157806340c10f19146101e957806342966c68146101fc5780635c975abb1461020f57806370a082311461021a57600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019a5780633092afd5146101ad575b600080fd5b61014f61034c565b60405161015c9190610d93565b60405180910390f35b610178610173366004610dfd565b6103de565b604051901515815260200161015c565b6002545b60405190815260200161015c565b6101786101a8366004610e27565b6103f8565b6101c06101bb366004610e63565b61041c565b005b600554600160a81b900460ff1660405160ff909116815260200161015c565b6101c06104c9565b6101c06101f7366004610dfd565b6104db565b6101c061020a366004610e85565b610589565b60055460ff16610178565b61018c610228366004610e63565b6001600160a01b031660009081526020819052604090205490565b6101c0610596565b6101c0610259366004610dfd565b6105a8565b6101c06105bd565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161015c565b61014f6105cd565b6101c06102a5366004610e63565b6105dc565b6101786102b8366004610dfd565b6106e2565b6102d06102cb366004610e9e565b6106f0565b60405161015c9190610f13565b61018c6102eb366004610f60565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c0610324366004610e63565b610888565b610178610337366004610e63565b60066020526000908152604090205460ff1681565b60606003805461035b90610f93565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610f93565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b5050505050905090565b6000336103ec8185856108c3565b60019150505b92915050565b6000336104068582856108d5565b610411858585610953565b506001949350505050565b6104246109b2565b6001600160a01b03811660009081526006602052604090205460ff166104805760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260066020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6104d16109b2565b6104d96109e5565b565b3360009081526006602052604090205460ff168061051a575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b61057b5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d696e746572206f72206f776e65722063616e20706572666f726d60448201526b103a3434b99030b1ba34b7b760a11b6064820152608401610477565b6105858282610a37565b5050565b6105933382610a6d565b50565b61059e6109b2565b6104d96000610aa3565b6105b38233836108d5565b6105858282610a6d565b6105c56109b2565b6104d9610afd565b60606004805461035b90610f93565b6105e46109b2565b6001600160a01b03811661063a5760405162461bcd60e51b815260206004820152601d60248201527f4d696e7465722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610477565b6001600160a01b03811660009081526006602052604090205460ff16156106965760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b4b73a32b960811b6044820152606401610477565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b6000336103ec818585610953565b60606000805b8381101561076b576006600086868481811061071457610714610fcd565b90506020020160208101906107299190610e63565b6001600160a01b0316815260208101919091526040016000205460ff1615610759578161075581610ff9565b9250505b8061076381610ff9565b9150506106f6565b5060008167ffffffffffffffff81111561078757610787611012565b6040519080825280602002602001820160405280156107b0578160200160208202803683370190505b5090506000805b8581101561087d57600660008888848181106107d5576107d5610fcd565b90506020020160208101906107ea9190610e63565b6001600160a01b0316815260208101919091526040016000205460ff161561086b5786868281811061081e5761081e610fcd565b90506020020160208101906108339190610e63565b83838151811061084557610845610fcd565b6001600160a01b03909216602092830291909101909101528161086781610ff9565b9250505b8061087581610ff9565b9150506107b7565b509095945050505050565b6108906109b2565b6001600160a01b0381166108ba57604051631e4fbdf760e01b815260006004820152602401610477565b61059381610aa3565b6108d08383836001610b3a565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461094d578181101561093e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610477565b61094d84848484036000610b3a565b50505050565b6001600160a01b03831661097d57604051634b637e8f60e11b815260006004820152602401610477565b6001600160a01b0382166109a75760405163ec442f0560e01b815260006004820152602401610477565b6108d0838383610c0f565b6005546001600160a01b036101009091041633146104d95760405163118cdaa760e01b8152336004820152602401610477565b6109ed610c22565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610a615760405163ec442f0560e01b815260006004820152602401610477565b61058560008383610c0f565b6001600160a01b038216610a9757604051634b637e8f60e11b815260006004820152602401610477565b61058582600083610c0f565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b05610c45565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a1a3390565b6001600160a01b038416610b645760405163e602df0560e01b815260006004820152602401610477565b6001600160a01b038316610b8e57604051634a1406b160e11b815260006004820152602401610477565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561094d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0191815260200190565b60405180910390a350505050565b610c17610c45565b6108d0838383610c69565b60055460ff166104d957604051638dfc202b60e01b815260040160405180910390fd5b60055460ff16156104d95760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038316610c94578060026000828254610c899190611028565b90915550610d069050565b6001600160a01b03831660009081526020819052604090205481811015610ce75760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610477565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d2257600280548290039055610d41565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d8691815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610dc057858101830151858201604001528201610da4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610df857600080fd5b919050565b60008060408385031215610e1057600080fd5b610e1983610de1565b946020939093013593505050565b600080600060608486031215610e3c57600080fd5b610e4584610de1565b9250610e5360208501610de1565b9150604084013590509250925092565b600060208284031215610e7557600080fd5b610e7e82610de1565b9392505050565b600060208284031215610e9757600080fd5b5035919050565b60008060208385031215610eb157600080fd5b823567ffffffffffffffff80821115610ec957600080fd5b818501915085601f830112610edd57600080fd5b813581811115610eec57600080fd5b8660208260051b8501011115610f0157600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610f545783516001600160a01b031683529284019291840191600101610f2f565b50909695505050505050565b60008060408385031215610f7357600080fd5b610f7c83610de1565b9150610f8a60208401610de1565b90509250929050565b600181811c90821680610fa757607f821691505b602082108103610fc757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161100b5761100b610fe3565b5060010190565b634e487b7160e01b600052604160045260246000fd5b808201808211156103f2576103f2610fe356fea2646970667358221220db4649677e6816744cafe0edbf3fb07ab6d398a100c40e20f07ba4aed1afac0764736f6c63430008140033",
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063983b2d561161007c578063983b2d5614610297578063a9059cbb146102aa578063d4e64c54146102bd578063dd62ed3e146102dd578063f2fde38b14610316578063f46eccc41461032957600080fd5b8063715018a61461024357806379cc67901461024b5780638456cb591461025e5780638da5cb5b1461026657806395d89b411461028f57600080fd5b8063313ce5671161010a578063313ce567146101c25780633f4ba83a146101e157806340c10f19146101e957806342966c68146101fc5780635c975abb1461020f57806370a082311461021a57600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019a5780633092afd5146101ad575b600080fd5b61014f61034c565b60405161015c9190610d93565b60405180910390f35b610178610173366004610dfd565b6103de565b604051901515815260200161015c565b6002545b60405190815260200161015c565b6101786101a8366004610e27565b6103f8565b6101c06101bb366004610e63565b61041c565b005b600554600160a81b900460ff1660405160ff909116815260200161015c565b6101c06104c9565b6101c06101f7366004610dfd565b6104db565b6101c061020a366004610e85565b610589565b60055460ff16610178565b61018c610228366004610e63565b6001600160a01b031660009081526020819052604090205490565b6101c0610596565b6101c0610259366004610dfd565b6105a8565b6101c06105bd565b60055461010090046001600160a01b03166040516001600160a01b03909116815260200161015c565b61014f6105cd565b6101c06102a5366004610e63565b6105dc565b6101786102b8366004610dfd565b6106e2565b6102d06102cb366004610e9e565b6106f0565b60405161015c9190610f13565b61018c6102eb366004610f60565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101c0610324366004610e63565b610888565b610178610337366004610e63565b60066020526000908152604090205460ff1681565b60606003805461035b90610f93565b80601f016020809104026020016040519081016040528092919081815260200182805461038790610f93565b80156103d45780601f106103a9576101008083540402835291602001916103d4565b820191906000526020600020905b8154815290600101906020018083116103b757829003601f168201915b5050505050905090565b6000336103ec8185856108c3565b60019150505b92915050565b6000336104068582856108d5565b610411858585610953565b506001949350505050565b6104246109b2565b6001600160a01b03811660009081526006602052604090205460ff166104805760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260066020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6104d16109b2565b6104d96109e5565b565b3360009081526006602052604090205460ff168061051a575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b61057b5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d696e746572206f72206f776e65722063616e20706572666f726d60448201526b103a3434b99030b1ba34b7b760a11b6064820152608401610477565b6105858282610a37565b5050565b6105933382610a6d565b50565b61059e6109b2565b6104d96000610aa3565b6105b38233836108d5565b6105858282610a6d565b6105c56109b2565b6104d9610afd565b60606004805461035b90610f93565b6105e46109b2565b6001600160a01b03811661063a5760405162461bcd60e51b815260206004820152601d60248201527f4d696e7465722063616e6e6f74206265207a65726f20616464726573730000006044820152606401610477565b6001600160a01b03811660009081526006602052604090205460ff16156106965760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b4b73a32b960811b6044820152606401610477565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b6000336103ec818585610953565b60606000805b8381101561076b576006600086868481811061071457610714610fcd565b90506020020160208101906107299190610e63565b6001600160a01b0316815260208101919091526040016000205460ff1615610759578161075581610ff9565b9250505b8061076381610ff9565b9150506106f6565b5060008167ffffffffffffffff81111561078757610787611012565b6040519080825280602002602001820160405280156107b0578160200160208202803683370190505b5090506000805b8581101561087d57600660008888848181106107d5576107d5610fcd565b90506020020160208101906107ea9190610e63565b6001600160a01b0316815260208101919091526040016000205460ff161561086b5786868281811061081e5761081e610fcd565b90506020020160208101906108339190610e63565b83838151811061084557610845610fcd565b6001600160a01b03909216602092830291909101909101528161086781610ff9565b9250505b8061087581610ff9565b9150506107b7565b509095945050505050565b6108906109b2565b6001600160a01b0381166108ba57604051631e4fbdf760e01b815260006004820152602401610477565b61059381610aa3565b6108d08383836001610b3a565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461094d578181101561093e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610477565b61094d84848484036000610b3a565b50505050565b6001600160a01b03831661097d57604051634b637e8f60e11b815260006004820152602401610477565b6001600160a01b0382166109a75760405163ec442f0560e01b815260006004820152602401610477565b6108d0838383610c0f565b6005546001600160a01b036101009091041633146104d95760405163118cdaa760e01b8152336004820152602401610477565b6109ed610c22565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610a615760405163ec442f0560e01b815260006004820152602401610477565b61058560008383610c0f565b6001600160a01b038216610a9757604051634b637e8f60e11b815260006004820152602401610477565b61058582600083610c0f565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b05610c45565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a1a3390565b6001600160a01b038416610b645760405163e602df0560e01b815260006004820152602401610477565b6001600160a01b038316610b8e57604051634a1406b160e11b815260006004820152602401610477565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561094d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c0191815260200190565b60405180910390a350505050565b610c17610c45565b6108d0838383610c69565b60055460ff166104d957604051638dfc202b60e01b815260040160405180910390fd5b60055460ff16156104d95760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038316610c94578060026000828254610c899190611028565b90915550610d069050565b6001600160a01b03831660009081526020819052604090205481811015610ce75760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610477565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d2257600280548290039055610d41565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d8691815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610dc057858101830151858201604001528201610da4565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610df857600080fd5b919050565b60008060408385031215610e1057600080fd5b610e1983610de1565b946020939093013593505050565b600080600060608486031215610e3c57600080fd5b610e4584610de1565b9250610e5360208501610de1565b9150604084013590509250925092565b600060208284031215610e7557600080fd5b610e7e82610de1565b9392505050565b600060208284031215610e9757600080fd5b5035919050565b60008060208385031215610eb157600080fd5b823567ffffffffffffffff80821115610ec957600080fd5b818501915085601f830112610edd57600080fd5b813581811115610eec57600080fd5b8660208260051b8501011115610f0157600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b81811015610f545783516001600160a01b031683529284019291840191600101610f2f565b50909695505050505050565b60008060408385031215610f7357600080fd5b610f7c83610de1565b9150610f8a60208401610de1565b90509250929050565b600181811c90821680610fa757607f821691505b602082108103610fc757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161100b5761100b610fe3565b5060010190565b634e487b7160e01b600052604160045260246000fd5b808201808211156103f2576103f2610fe356fea2646970667358221220db4649677e6816744cafe0edbf3fb07ab6d398a100c40e20f07ba4aed1afac0764736f6c63430008140033",
- "linkReferences": {},
- "deployedLinkReferences": {}
-}
diff --git a/BiatecTokensApi/ABI/BiatecTokenMintable.json b/BiatecTokensApi/ABI/BiatecTokenMintable.json
new file mode 100644
index 0000000..7ee78c0
--- /dev/null
+++ b/BiatecTokensApi/ABI/BiatecTokenMintable.json
@@ -0,0 +1,671 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "BiatecTokenMintable",
+ "sourceName": "contracts/BiatecTokenMintable.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "decimals_",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint256",
+ "name": "initialSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "initialSupplyReceiver",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "increasedSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC20ExceededCap",
+ "type": "error"
+ },
+ {
+ "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": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC20InvalidCap",
+ "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": [],
+ "name": "EnforcedPause",
+ "type": "error"
+ },
+ {
+ "inputs": [],
+ "name": "ExpectedPause",
+ "type": "error"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnableInvalidOwner",
+ "type": "error"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "OwnableUnauthorizedAccount",
+ "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": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newMinter",
+ "type": "address"
+ }
+ ],
+ "name": "MinterAdded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "removedMinter",
+ "type": "address"
+ }
+ ],
+ "name": "MinterRemoved",
+ "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": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Paused",
+ "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": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "Unpaused",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newMinter",
+ "type": "address"
+ }
+ ],
+ "name": "addMinter",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "burnFrom",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "cap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address[]",
+ "name": "possibleMinters",
+ "type": "address[]"
+ }
+ ],
+ "name": "listMinters",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "minters",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "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": "pause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "paused",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "minterToRemove",
+ "type": "address"
+ }
+ ],
+ "name": "removeMinter",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "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": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "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": "value",
+ "type": "uint256"
+ }
+ ],
+ "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"
+ },
+ {
+ "inputs": [],
+ "name": "unpause",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60a06040523480156200001157600080fd5b506040516200180538038062001805833981016040819052620000349162000487565b338287876003620000468382620005ce565b506004620000558282620005ce565b50505080600003620000825760405163392e1e2760e01b8152600060048201526024015b60405180910390fd5b6080526005805460ff191690556001600160a01b038116620000bb57604051631e4fbdf760e01b81526000600482015260240162000079565b620000c68162000137565b506005805460ff60a81b1916600160a81b60ff871602179055336000908152600660205260409020805460ff1916600117905582156200012b5760006001600160a01b038216156200011957816200011b565b335b905062000129818562000191565b505b505050505050620006c2565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001bd5760405163ec442f0560e01b81526000600482015260240162000079565b620001cb60008383620001cf565b5050565b620001d9620001eb565b620001e683838362000212565b505050565b60055460ff1615620002105760405163d93c066560e01b815260040160405180910390fd5b565b6200021c620001eb565b620001e6838383620002308383836200028f565b6001600160a01b038316620001e65760006200024b60805190565b905060006200025960025490565b905081811115620002885760405163279e7e1560e21b8152600481018290526024810183905260440162000079565b5050505050565b6001600160a01b038316620002be578060026000828254620002b291906200069a565b90915550620003329050565b6001600160a01b03831660009081526020819052604090205481811015620003135760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000079565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821662000350576002805482900390556200036f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003b591815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003ea57600080fd5b81516001600160401b0380821115620004075762000407620003c2565b604051601f8301601f19908116603f01168101908282118183101715620004325762000432620003c2565b816040528381526020925086838588010111156200044f57600080fd5b600091505b8382101562000473578582018301518183018401529082019062000454565b600093810190920192909252949350505050565b60008060008060008060c08789031215620004a157600080fd5b86516001600160401b0380821115620004b957600080fd5b620004c78a838b01620003d8565b97506020890151915080821115620004de57600080fd5b50620004ed89828a01620003d8565b955050604087015160ff811681146200050557600080fd5b6060880151608089015160a08a015192965090945092506001600160a01b03811681146200053257600080fd5b809150509295509295509295565b600181811c908216806200055557607f821691505b6020821081036200057657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e657600081815260208120601f850160051c81016020861015620005a55750805b601f850160051c820191505b81811015620005c657828155600101620005b1565b505050505050565b81516001600160401b03811115620005ea57620005ea620003c2565b6200060281620005fb845462000540565b846200057c565b602080601f8311600181146200063a5760008415620006215750858301515b600019600386901b1c1916600185901b178555620005c6565b600085815260208120601f198616915b828110156200066b578886015182559484019460019091019084016200064a565b50858210156200068a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620006bc57634e487b7160e01b600052601160045260246000fd5b92915050565b608051611120620006e5600039600081816101ee0152610cc601526111206000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063983b2d561161007c578063983b2d56146102c8578063a9059cbb146102db578063d4e64c54146102ee578063dd62ed3e1461030e578063f2fde38b14610347578063f46eccc41461035a57600080fd5b806370a082311461024b578063715018a61461027457806379cc67901461027c5780638456cb591461028f5780638da5cb5b1461029757806395d89b41146102c057600080fd5b8063313ce56711610115578063313ce567146101cd578063355274ea146101ec5780633f4ba83a1461021257806340c10f191461021a57806342966c681461022d5780635c975abb1461024057600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a55780633092afd5146101b8575b600080fd5b61015a61037d565b6040516101679190610e42565b60405180910390f35b61018361017e366004610eac565b61040f565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004610ed6565b610429565b6101cb6101c6366004610f12565b61044d565b005b600554600160a81b900460ff1660405160ff9091168152602001610167565b7f0000000000000000000000000000000000000000000000000000000000000000610197565b6101cb6104fa565b6101cb610228366004610eac565b61050c565b6101cb61023b366004610f34565b6105ba565b60055460ff16610183565b610197610259366004610f12565b6001600160a01b031660009081526020819052604090205490565b6101cb6105c7565b6101cb61028a366004610eac565b6105d9565b6101cb6105ee565b60055461010090046001600160a01b03166040516001600160a01b039091168152602001610167565b61015a6105fe565b6101cb6102d6366004610f12565b61060d565b6101836102e9366004610eac565b610713565b6103016102fc366004610f4d565b610721565b6040516101679190610fc2565b61019761031c36600461100f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101cb610355366004610f12565b6108b9565b610183610368366004610f12565b60066020526000908152604090205460ff1681565b60606003805461038c90611042565b80601f01602080910402602001604051908101604052809291908181526020018280546103b890611042565b80156104055780601f106103da57610100808354040283529160200191610405565b820191906000526020600020905b8154815290600101906020018083116103e857829003601f168201915b5050505050905090565b60003361041d8185856108f4565b60019150505b92915050565b600033610437858285610906565b610442858585610984565b506001949350505050565b6104556109e3565b6001600160a01b03811660009081526006602052604090205460ff166104b15760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260066020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6105026109e3565b61050a610a16565b565b3360009081526006602052604090205460ff168061054b575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b6105ac5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d696e746572206f72206f776e65722063616e20706572666f726d60448201526b103a3434b99030b1ba34b7b760a11b60648201526084016104a8565b6105b68282610a68565b5050565b6105c43382610a9e565b50565b6105cf6109e3565b61050a6000610ad4565b6105e4823383610906565b6105b68282610a9e565b6105f66109e3565b61050a610b2e565b60606004805461038c90611042565b6106156109e3565b6001600160a01b03811661066b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e7465722063616e6e6f74206265207a65726f206164647265737300000060448201526064016104a8565b6001600160a01b03811660009081526006602052604090205460ff16156106c75760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b4b73a32b960811b60448201526064016104a8565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b60003361041d818585610984565b60606000805b8381101561079c57600660008686848181106107455761074561107c565b905060200201602081019061075a9190610f12565b6001600160a01b0316815260208101919091526040016000205460ff161561078a5781610786816110a8565b9250505b80610794816110a8565b915050610727565b5060008167ffffffffffffffff8111156107b8576107b86110c1565b6040519080825280602002602001820160405280156107e1578160200160208202803683370190505b5090506000805b858110156108ae57600660008888848181106108065761080661107c565b905060200201602081019061081b9190610f12565b6001600160a01b0316815260208101919091526040016000205460ff161561089c5786868281811061084f5761084f61107c565b90506020020160208101906108649190610f12565b8383815181106108765761087661107c565b6001600160a01b039092166020928302919091019091015281610898816110a8565b9250505b806108a6816110a8565b9150506107e8565b509095945050505050565b6108c16109e3565b6001600160a01b0381166108eb57604051631e4fbdf760e01b8152600060048201526024016104a8565b6105c481610ad4565b6109018383836001610b6b565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461097e578181101561096f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104a8565b61097e84848484036000610b6b565b50505050565b6001600160a01b0383166109ae57604051634b637e8f60e11b8152600060048201526024016104a8565b6001600160a01b0382166109d85760405163ec442f0560e01b8152600060048201526024016104a8565b610901838383610c40565b6005546001600160a01b0361010090910416331461050a5760405163118cdaa760e01b81523360048201526024016104a8565b610a1e610c53565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610a925760405163ec442f0560e01b8152600060048201526024016104a8565b6105b660008383610c40565b6001600160a01b038216610ac857604051634b637e8f60e11b8152600060048201526024016104a8565b6105b682600083610c40565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b36610c76565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a4b3390565b6001600160a01b038416610b955760405163e602df0560e01b8152600060048201526024016104a8565b6001600160a01b038316610bbf57604051634a1406b160e11b8152600060048201526024016104a8565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561097e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c3291815260200190565b60405180910390a350505050565b610c48610c76565b610901838383610c9a565b60055460ff1661050a57604051638dfc202b60e01b815260040160405180910390fd5b60055460ff161561050a5760405163d93c066560e01b815260040160405180910390fd5b610ca2610c76565b610901838383610cb3838383610d18565b6001600160a01b038316610901576002547f00000000000000000000000000000000000000000000000000000000000000009081811115610d115760405163279e7e1560e21b815260048101829052602481018390526044016104a8565b5050505050565b6001600160a01b038316610d43578060026000828254610d3891906110d7565b90915550610db59050565b6001600160a01b03831660009081526020819052604090205481811015610d965760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104a8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610dd157600280548290039055610df0565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3591815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610e6f57858101830151858201604001528201610e53565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610ea757600080fd5b919050565b60008060408385031215610ebf57600080fd5b610ec883610e90565b946020939093013593505050565b600080600060608486031215610eeb57600080fd5b610ef484610e90565b9250610f0260208501610e90565b9150604084013590509250925092565b600060208284031215610f2457600080fd5b610f2d82610e90565b9392505050565b600060208284031215610f4657600080fd5b5035919050565b60008060208385031215610f6057600080fd5b823567ffffffffffffffff80821115610f7857600080fd5b818501915085601f830112610f8c57600080fd5b813581811115610f9b57600080fd5b8660208260051b8501011115610fb057600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156110035783516001600160a01b031683529284019291840191600101610fde565b50909695505050505050565b6000806040838503121561102257600080fd5b61102b83610e90565b915061103960208401610e90565b90509250929050565b600181811c9082168061105657607f821691505b60208210810361107657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110ba576110ba611092565b5060010190565b634e487b7160e01b600052604160045260246000fd5b808201808211156104235761042361109256fea264697066735822122041f369991b86a1af7b372a7bdba5e05ff4c867e63c4e9b0a1c6675cd250a07af64736f6c63430008140033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063983b2d561161007c578063983b2d56146102c8578063a9059cbb146102db578063d4e64c54146102ee578063dd62ed3e1461030e578063f2fde38b14610347578063f46eccc41461035a57600080fd5b806370a082311461024b578063715018a61461027457806379cc67901461027c5780638456cb591461028f5780638da5cb5b1461029757806395d89b41146102c057600080fd5b8063313ce56711610115578063313ce567146101cd578063355274ea146101ec5780633f4ba83a1461021257806340c10f191461021a57806342966c681461022d5780635c975abb1461024057600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a55780633092afd5146101b8575b600080fd5b61015a61037d565b6040516101679190610e42565b60405180910390f35b61018361017e366004610eac565b61040f565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004610ed6565b610429565b6101cb6101c6366004610f12565b61044d565b005b600554600160a81b900460ff1660405160ff9091168152602001610167565b7f0000000000000000000000000000000000000000000000000000000000000000610197565b6101cb6104fa565b6101cb610228366004610eac565b61050c565b6101cb61023b366004610f34565b6105ba565b60055460ff16610183565b610197610259366004610f12565b6001600160a01b031660009081526020819052604090205490565b6101cb6105c7565b6101cb61028a366004610eac565b6105d9565b6101cb6105ee565b60055461010090046001600160a01b03166040516001600160a01b039091168152602001610167565b61015a6105fe565b6101cb6102d6366004610f12565b61060d565b6101836102e9366004610eac565b610713565b6103016102fc366004610f4d565b610721565b6040516101679190610fc2565b61019761031c36600461100f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101cb610355366004610f12565b6108b9565b610183610368366004610f12565b60066020526000908152604090205460ff1681565b60606003805461038c90611042565b80601f01602080910402602001604051908101604052809291908181526020018280546103b890611042565b80156104055780601f106103da57610100808354040283529160200191610405565b820191906000526020600020905b8154815290600101906020018083116103e857829003601f168201915b5050505050905090565b60003361041d8185856108f4565b60019150505b92915050565b600033610437858285610906565b610442858585610984565b506001949350505050565b6104556109e3565b6001600160a01b03811660009081526006602052604090205460ff166104b15760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260066020526040808220805460ff19169055517fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb666929190a250565b6105026109e3565b61050a610a16565b565b3360009081526006602052604090205460ff168061054b575060055461010090046001600160a01b03166001600160a01b0316336001600160a01b0316145b6105ac5760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c79206d696e746572206f72206f776e65722063616e20706572666f726d60448201526b103a3434b99030b1ba34b7b760a11b60648201526084016104a8565b6105b68282610a68565b5050565b6105c43382610a9e565b50565b6105cf6109e3565b61050a6000610ad4565b6105e4823383610906565b6105b68282610a9e565b6105f66109e3565b61050a610b2e565b60606004805461038c90611042565b6106156109e3565b6001600160a01b03811661066b5760405162461bcd60e51b815260206004820152601d60248201527f4d696e7465722063616e6e6f74206265207a65726f206164647265737300000060448201526064016104a8565b6001600160a01b03811660009081526006602052604090205460ff16156106c75760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b4b73a32b960811b60448201526064016104a8565b6001600160a01b038116600081815260066020526040808220805460ff19166001179055517f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f69190a250565b60003361041d818585610984565b60606000805b8381101561079c57600660008686848181106107455761074561107c565b905060200201602081019061075a9190610f12565b6001600160a01b0316815260208101919091526040016000205460ff161561078a5781610786816110a8565b9250505b80610794816110a8565b915050610727565b5060008167ffffffffffffffff8111156107b8576107b86110c1565b6040519080825280602002602001820160405280156107e1578160200160208202803683370190505b5090506000805b858110156108ae57600660008888848181106108065761080661107c565b905060200201602081019061081b9190610f12565b6001600160a01b0316815260208101919091526040016000205460ff161561089c5786868281811061084f5761084f61107c565b90506020020160208101906108649190610f12565b8383815181106108765761087661107c565b6001600160a01b039092166020928302919091019091015281610898816110a8565b9250505b806108a6816110a8565b9150506107e8565b509095945050505050565b6108c16109e3565b6001600160a01b0381166108eb57604051631e4fbdf760e01b8152600060048201526024016104a8565b6105c481610ad4565b6109018383836001610b6b565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461097e578181101561096f57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104a8565b61097e84848484036000610b6b565b50505050565b6001600160a01b0383166109ae57604051634b637e8f60e11b8152600060048201526024016104a8565b6001600160a01b0382166109d85760405163ec442f0560e01b8152600060048201526024016104a8565b610901838383610c40565b6005546001600160a01b0361010090910416331461050a5760405163118cdaa760e01b81523360048201526024016104a8565b610a1e610c53565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216610a925760405163ec442f0560e01b8152600060048201526024016104a8565b6105b660008383610c40565b6001600160a01b038216610ac857604051634b637e8f60e11b8152600060048201526024016104a8565b6105b682600083610c40565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610b36610c76565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a4b3390565b6001600160a01b038416610b955760405163e602df0560e01b8152600060048201526024016104a8565b6001600160a01b038316610bbf57604051634a1406b160e11b8152600060048201526024016104a8565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561097e57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c3291815260200190565b60405180910390a350505050565b610c48610c76565b610901838383610c9a565b60055460ff1661050a57604051638dfc202b60e01b815260040160405180910390fd5b60055460ff161561050a5760405163d93c066560e01b815260040160405180910390fd5b610ca2610c76565b610901838383610cb3838383610d18565b6001600160a01b038316610901576002547f00000000000000000000000000000000000000000000000000000000000000009081811115610d115760405163279e7e1560e21b815260048101829052602481018390526044016104a8565b5050505050565b6001600160a01b038316610d43578060026000828254610d3891906110d7565b90915550610db59050565b6001600160a01b03831660009081526020819052604090205481811015610d965760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104a8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610dd157600280548290039055610df0565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e3591815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610e6f57858101830151858201604001528201610e53565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610ea757600080fd5b919050565b60008060408385031215610ebf57600080fd5b610ec883610e90565b946020939093013593505050565b600080600060608486031215610eeb57600080fd5b610ef484610e90565b9250610f0260208501610e90565b9150604084013590509250925092565b600060208284031215610f2457600080fd5b610f2d82610e90565b9392505050565b600060208284031215610f4657600080fd5b5035919050565b60008060208385031215610f6057600080fd5b823567ffffffffffffffff80821115610f7857600080fd5b818501915085601f830112610f8c57600080fd5b813581811115610f9b57600080fd5b8660208260051b8501011115610fb057600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b818110156110035783516001600160a01b031683529284019291840191600101610fde565b50909695505050505050565b6000806040838503121561102257600080fd5b61102b83610e90565b915061103960208401610e90565b90509250929050565b600181811c9082168061105657607f821691505b60208210810361107657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110ba576110ba611092565b5060010190565b634e487b7160e01b600052604160045260246000fd5b808201808211156104235761042361109256fea264697066735822122041f369991b86a1af7b372a7bdba5e05ff4c867e63c4e9b0a1c6675cd250a07af64736f6c63430008140033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/BiatecTokensApi/ABI/BiatecTokenPreminted.json b/BiatecTokensApi/ABI/BiatecTokenPreminted.json
new file mode 100644
index 0000000..d5603fb
--- /dev/null
+++ b/BiatecTokensApi/ABI/BiatecTokenPreminted.json
@@ -0,0 +1,390 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "BiatecTokenPreminted",
+ "sourceName": "contracts/BiatecTokenPreminted.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "decimals_",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint256",
+ "name": "initialSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "initialSupplyReceiver",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "increasedSupply",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC20ExceededCap",
+ "type": "error"
+ },
+ {
+ "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": "uint256",
+ "name": "cap",
+ "type": "uint256"
+ }
+ ],
+ "name": "ERC20InvalidCap",
+ "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"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "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": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "cap",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "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": "value",
+ "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": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60a06040523480156200001157600080fd5b5060405162000d9e38038062000d9e83398101604081905262000034916200037c565b8185856003620000458382620004ba565b506004620000548282620004ba565b50505080600003620000815760405163392e1e2760e01b8152600060048201526024015b60405180910390fd5b6080526005805460ff191660ff851617905560006001600160a01b03821615620000ac5781620000ae565b335b9050620000bc8184620000c8565b505050505050620005ae565b6001600160a01b038216620000f45760405163ec442f0560e01b81526000600482015260240162000078565b620001026000838362000106565b5050565b6200011383838362000118565b505050565b6200012583838362000184565b6001600160a01b038316620001135760006200014060805190565b905060006200014e60025490565b9050818111156200017d5760405163279e7e1560e21b8152600481018290526024810183905260440162000078565b5050505050565b6001600160a01b038316620001b3578060026000828254620001a7919062000586565b90915550620002279050565b6001600160a01b03831660009081526020819052604090205481811015620002085760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000078565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620002455760028054829003905562000264565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002aa91815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002df57600080fd5b81516001600160401b0380821115620002fc57620002fc620002b7565b604051601f8301601f19908116603f01168101908282118183101715620003275762000327620002b7565b816040528381526020925086838588010111156200034457600080fd5b600091505b8382101562000368578582018301518183018401529082019062000349565b600093810190920192909252949350505050565b600080600080600060a086880312156200039557600080fd5b85516001600160401b0380821115620003ad57600080fd5b620003bb89838a01620002cd565b96506020880151915080821115620003d257600080fd5b50620003e188828901620002cd565b945050604086015160ff81168114620003f957600080fd5b6060870151608088015191945092506001600160a01b03811681146200041e57600080fd5b809150509295509295909350565b600181811c908216806200044157607f821691505b6020821081036200046257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200011357600081815260208120601f850160051c81016020861015620004915750805b601f850160051c820191505b81811015620004b2578281556001016200049d565b505050505050565b81516001600160401b03811115620004d657620004d6620002b7565b620004ee81620004e784546200042c565b8462000468565b602080601f8311600181146200052657600084156200050d5750858301515b600019600386901b1c1916600185901b178555620004b2565b600085815260208120601f198616915b82811015620005575788860151825594840194600190910190840162000536565b5085821015620005765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115620005a857634e487b7160e01b600052601160045260246000fd5b92915050565b6080516107cd620005d160003960008181610120015261049b01526107cd6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063355274ea11610066578063355274ea1461011e57806370a082311461014457806395d89b411461016d578063a9059cbb14610175578063dd62ed3e1461018857600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101c1565b6040516100b89190610617565b60405180910390f35b6100d46100cf366004610681565b610253565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046106ab565b61026d565b60055460405160ff90911681526020016100b8565b7f00000000000000000000000000000000000000000000000000000000000000006100e8565b6100e86101523660046106e7565b6001600160a01b031660009081526020819052604090205490565b6100ab610291565b6100d4610183366004610681565b6102a0565b6100e8610196366004610709565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d09061073c565b80601f01602080910402602001604051908101604052809291908181526020018280546101fc9061073c565b80156102495780601f1061021e57610100808354040283529160200191610249565b820191906000526020600020905b81548152906001019060200180831161022c57829003601f168201915b5050505050905090565b6000336102618185856102ae565b60019150505b92915050565b60003361027b8582856102c0565b610286858585610343565b506001949350505050565b6060600480546101d09061073c565b600033610261818585610343565b6102bb83838360016103a2565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461033d578181101561032e57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61033d848484840360006103a2565b50505050565b6001600160a01b03831661036d57604051634b637e8f60e11b815260006004820152602401610325565b6001600160a01b0382166103975760405163ec442f0560e01b815260006004820152602401610325565b6102bb838383610477565b6001600160a01b0384166103cc5760405163e602df0560e01b815260006004820152602401610325565b6001600160a01b0383166103f657604051634a1406b160e11b815260006004820152602401610325565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161046991815260200190565b60405180910390a350505050565b6102bb8383836104888383836104ed565b6001600160a01b0383166102bb576002547f000000000000000000000000000000000000000000000000000000000000000090818111156104e65760405163279e7e1560e21b81526004810182905260248101839052604401610325565b5050505050565b6001600160a01b03831661051857806002600082825461050d9190610776565b9091555061058a9050565b6001600160a01b0383166000908152602081905260409020548181101561056b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610325565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105a6576002805482900390556105c5565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161060a91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b8181101561064457858101830151858201604001528201610628565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461067c57600080fd5b919050565b6000806040838503121561069457600080fd5b61069d83610665565b946020939093013593505050565b6000806000606084860312156106c057600080fd5b6106c984610665565b92506106d760208501610665565b9150604084013590509250925092565b6000602082840312156106f957600080fd5b61070282610665565b9392505050565b6000806040838503121561071c57600080fd5b61072583610665565b915061073360208401610665565b90509250929050565b600181811c9082168061075057607f821691505b60208210810361077057634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026757634e487b7160e01b600052601160045260246000fdfea2646970667358221220029d19fb0a7da290cdcc9407107d5009341ca8820309a000d9bd722d6cf7076f64736f6c63430008140033",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063355274ea11610066578063355274ea1461011e57806370a082311461014457806395d89b411461016d578063a9059cbb14610175578063dd62ed3e1461018857600080fd5b806306fdde03146100a3578063095ea7b3146100c157806318160ddd146100e457806323b872dd146100f6578063313ce56714610109575b600080fd5b6100ab6101c1565b6040516100b89190610617565b60405180910390f35b6100d46100cf366004610681565b610253565b60405190151581526020016100b8565b6002545b6040519081526020016100b8565b6100d46101043660046106ab565b61026d565b60055460405160ff90911681526020016100b8565b7f00000000000000000000000000000000000000000000000000000000000000006100e8565b6100e86101523660046106e7565b6001600160a01b031660009081526020819052604090205490565b6100ab610291565b6100d4610183366004610681565b6102a0565b6100e8610196366004610709565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101d09061073c565b80601f01602080910402602001604051908101604052809291908181526020018280546101fc9061073c565b80156102495780601f1061021e57610100808354040283529160200191610249565b820191906000526020600020905b81548152906001019060200180831161022c57829003601f168201915b5050505050905090565b6000336102618185856102ae565b60019150505b92915050565b60003361027b8582856102c0565b610286858585610343565b506001949350505050565b6060600480546101d09061073c565b600033610261818585610343565b6102bb83838360016103a2565b505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461033d578181101561032e57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61033d848484840360006103a2565b50505050565b6001600160a01b03831661036d57604051634b637e8f60e11b815260006004820152602401610325565b6001600160a01b0382166103975760405163ec442f0560e01b815260006004820152602401610325565b6102bb838383610477565b6001600160a01b0384166103cc5760405163e602df0560e01b815260006004820152602401610325565b6001600160a01b0383166103f657604051634a1406b160e11b815260006004820152602401610325565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561033d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161046991815260200190565b60405180910390a350505050565b6102bb8383836104888383836104ed565b6001600160a01b0383166102bb576002547f000000000000000000000000000000000000000000000000000000000000000090818111156104e65760405163279e7e1560e21b81526004810182905260248101839052604401610325565b5050505050565b6001600160a01b03831661051857806002600082825461050d9190610776565b9091555061058a9050565b6001600160a01b0383166000908152602081905260409020548181101561056b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610325565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166105a6576002805482900390556105c5565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161060a91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b8181101561064457858101830151858201604001528201610628565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461067c57600080fd5b919050565b6000806040838503121561069457600080fd5b61069d83610665565b946020939093013593505050565b6000806000606084860312156106c057600080fd5b6106c984610665565b92506106d760208501610665565b9150604084013590509250925092565b6000602082840312156106f957600080fd5b61070282610665565b9392505050565b6000806040838503121561071c57600080fd5b61072583610665565b915061073360208401610665565b90509250929050565b600181811c9082168061075057607f821691505b60208210810361077057634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561026757634e487b7160e01b600052601160045260246000fdfea2646970667358221220029d19fb0a7da290cdcc9407107d5009341ca8820309a000d9bd722d6cf7076f64736f6c63430008140033",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/BiatecTokensApi/BiatecTokensApi.csproj b/BiatecTokensApi/BiatecTokensApi.csproj
index e137c74..9715863 100644
--- a/BiatecTokensApi/BiatecTokensApi.csproj
+++ b/BiatecTokensApi/BiatecTokensApi.csproj
@@ -10,11 +10,12 @@
-
+
+
@@ -31,12 +32,16 @@
+
PreserveNewest
+
+ Always
+
diff --git a/BiatecTokensApi/Configuration/BlockchainConfig.cs b/BiatecTokensApi/Configuration/BlockchainConfig.cs
deleted file mode 100644
index 9f65591..0000000
--- a/BiatecTokensApi/Configuration/BlockchainConfig.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace BiatecTokensApi.Configuration
-{
- public class BlockchainConfig
- {
- ///
- /// RPC URL for the Base blockchain (can be mainnet or testnet)
- ///
- public string? BaseRpcUrl { get; set; }
-
- ///
- /// Chain ID for Base Mainnet (8453) or Base Sepolia Testnet (84532)
- ///
- public int ChainId { get; set; }
-
- ///
- /// Gas limit for token deployment
- ///
- public int GasLimit { get; set; } = 4500000;
- }
-}
\ No newline at end of file
diff --git a/BiatecTokensApi/Configuration/EVMBlockchainConfig.cs b/BiatecTokensApi/Configuration/EVMBlockchainConfig.cs
new file mode 100644
index 0000000..7d93131
--- /dev/null
+++ b/BiatecTokensApi/Configuration/EVMBlockchainConfig.cs
@@ -0,0 +1,27 @@
+namespace BiatecTokensApi.Configuration
+{
+ ///
+ /// Represents the configuration settings for an EVM-compatible blockchain, such as Base Mainnet or Base Sepolia
+ /// Testnet.
+ ///
+ /// This class provides the necessary parameters to interact with an EVM-compatible blockchain,
+ /// including the RPC URL, chain ID, and gas limit. It is typically used to configure blockchain-related operations
+ /// or services.
+ public class EVMBlockchainConfig
+ {
+ ///
+ /// RPC URL for the Base blockchain (can be mainnet or testnet)
+ ///
+ public string? RpcUrl { get; set; }
+
+ ///
+ /// Chain ID for Base Mainnet (8453) or Base Sepolia Testnet (84532), or others
+ ///
+ public int ChainId { get; set; }
+
+ ///
+ /// Gas limit for token deployment
+ ///
+ public int GasLimit { get; set; } = 4500000;
+ }
+}
\ No newline at end of file
diff --git a/BiatecTokensApi/Configuration/EVMChains.cs b/BiatecTokensApi/Configuration/EVMChains.cs
new file mode 100644
index 0000000..25f1a2b
--- /dev/null
+++ b/BiatecTokensApi/Configuration/EVMChains.cs
@@ -0,0 +1,16 @@
+namespace BiatecTokensApi.Configuration
+{
+ ///
+ /// Represents a collection of blockchain configurations for supported Ethereum Virtual Machine (EVM) chains.
+ ///
+ /// This class provides a centralized way to manage and access configurations for multiple
+ /// EVM-compatible blockchains. Each configuration in the property defines the settings and
+ /// parameters for a specific chain.
+ public class EVMChains
+ {
+ ///
+ /// Gets or sets the collection of blockchain configurations for supported EVM chains.
+ ///
+ public List Chains { get; set; } = new List();
+ }
+}
diff --git a/BiatecTokensApi/Controllers/TokenController.cs b/BiatecTokensApi/Controllers/TokenController.cs
index c0ac0a3..3106d87 100644
--- a/BiatecTokensApi/Controllers/TokenController.cs
+++ b/BiatecTokensApi/Controllers/TokenController.cs
@@ -1,31 +1,60 @@
using BiatecTokensApi.Models;
+using BiatecTokensApi.Models.ARC1400.Request;
+using BiatecTokensApi.Models.ARC200.Request;
+using BiatecTokensApi.Models.ARC200.Response;
+using BiatecTokensApi.Models.ARC3.Request;
+using BiatecTokensApi.Models.ARC3.Response;
+using BiatecTokensApi.Models.ASA.Request;
+using BiatecTokensApi.Models.ERC20.Request;
+using BiatecTokensApi.Models.EVM;
using BiatecTokensApi.Services;
+using BiatecTokensApi.Services.Interface;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace BiatecTokensApi.Controllers
{
+ ///
+ /// Provides endpoints for creating and managing various types of tokens, including ERC-20, ARC3 fungible tokens,
+ /// ARC3 non-fungible tokens (NFTs), and ARC200 tokens.
+ ///
+ /// This controller includes methods for deploying and managing tokens on different blockchain
+ /// networks. It supports advanced token standards such as ERC-20 and ARC3, offering features like minting, burning,
+ /// pausing, and metadata validation. Each endpoint validates the input request, interacts with the corresponding
+ /// token service, and returns appropriate responses based on the operation's success or failure.
[Authorize]
[ApiController]
[Route("api/v1/token")]
public class TokenController : ControllerBase
{
private readonly IERC20TokenService _erc20TokenService;
- private readonly IARC3FungibleTokenService _arc3TokenService;
+ private readonly IARC3TokenService _arc3TokenService;
+ private readonly IASATokenService _asaTokenService;
+ private readonly IARC200TokenService _arc200TokenService;
+ private readonly IARC1400TokenService _arc1400TokenService;
private readonly ILogger _logger;
///
/// Initializes a new instance of the class.
///
/// The service used to interact with ERC-20 tokens.
- /// The service used to interact with ARC-3 fungible tokens.
+ /// The service used to interact with ARC-3 tokens.
+ /// The service used to interact with ASA tokens.
+ /// The service used to interact with ARC-200 tokens
+ /// The service used to interact with ARC-1400 tokens
/// The logger instance used to log diagnostic and operational information.
public TokenController(
IERC20TokenService erc20TokenService,
- IARC3FungibleTokenService arc3TokenService,
+ IARC3TokenService arc3TokenService,
+ IASATokenService asaTokenService,
+ IARC200TokenService arc200TokenService,
+ IARC1400TokenService arc1400TokenService,
ILogger logger)
{
_erc20TokenService = erc20TokenService;
_arc3TokenService = arc3TokenService;
+ _asaTokenService = asaTokenService;
+ _arc200TokenService = arc200TokenService;
+ _arc1400TokenService = arc1400TokenService;
_logger = logger;
}
@@ -41,11 +70,11 @@ public TokenController(
///
/// Token deployment parameters including optional initial supply receiver
/// Deployment result with contract address and initial supply receiver
- [HttpPost("erc20/create")]
- [ProducesResponseType(typeof(TokenDeploymentResponse), StatusCodes.Status200OK)]
+ [HttpPost("erc20-mintable/create")]
+ [ProducesResponseType(typeof(EVMTokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task DeployToken([FromBody] TokenDeploymentRequest request)
+ public async Task ERC20MintableTokenCreate([FromBody] ERC20MintableTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -54,7 +83,52 @@ public async Task DeployToken([FromBody] TokenDeploymentRequest r
try
{
- var result = await _erc20TokenService.DeployTokenAsync(request);
+ var result = await _erc20TokenService.DeployERC20TokenAsync(request, TokenType.ERC20_Mintable);
+
+ if (result.Success)
+ {
+ _logger.LogInformation("BiatecToken deployed successfully at address {Address} with transaction {TxHash}",
+ result.ContractAddress, result.TransactionHash);
+ return Ok(result);
+ }
+ else
+ {
+ _logger.LogError("BiatecToken deployment failed: {Error}", result.ErrorMessage);
+ return StatusCode(StatusCodes.Status500InternalServerError, result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error deploying BiatecToken");
+ return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
+ }
+ }
+
+ ///
+ /// Deploys a new ERC20 preminted token based on the provided deployment request.
+ ///
+ /// This method logs the deployment status and any errors encountered during the
+ /// process.
+ /// The containing the parameters for the token deployment. Must be a
+ /// valid model; otherwise, a 400 Bad Request response is returned.
+ /// An representing the result of the token deployment operation. Returns a 200 OK
+ /// response with an if the deployment is successful. Returns a 400 Bad
+ /// Request response if the request model is invalid. Returns a 500 Internal Server Error response if an error
+ /// occurs during deployment.
+ [HttpPost("erc20-preminted/create")]
+ [ProducesResponseType(typeof(EVMTokenDeploymentResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task ERC20PremnitedTokenCreate([FromBody] ERC20PremintedTokenDeploymentRequest request)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+
+ try
+ {
+ var result = await _erc20TokenService.DeployERC20TokenAsync(request, TokenType.ERC20_Preminted);
if (result.Success)
{
@@ -87,11 +161,11 @@ public async Task DeployToken([FromBody] TokenDeploymentRequest r
/// if the token is created successfully. Returns a 400 Bad Request
/// response if the request model is invalid. Returns a 500 Internal Server Error response if an error occurs
/// during token creation.
- [HttpPost("asa/create")]
- [ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
+ [HttpPost("asa-ft/create")]
+ [ProducesResponseType(typeof(ASATokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task CreateASAToken([FromBody] ARC3FungibleTokenDeploymentRequest request)
+ public async Task> CreateASAToken([FromBody] ASAFungibleTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -100,7 +174,7 @@ public async Task CreateASAToken([FromBody] ARC3FungibleTokenDepl
try
{
- var result = await _arc3TokenService.CreateTokenAsync(request);
+ var result = await _asaTokenService.CreateASATokenAsync(request, TokenType.ASA_FT);
if (result.Success)
{
@@ -121,6 +195,98 @@ public async Task CreateASAToken([FromBody] ARC3FungibleTokenDepl
}
}
///
+ /// Creates an ASA NFT (Algorand Standard Asset Non-Fungible Token) based on the provided deployment request. It creates basic ASA token with quantity of 1. If you want to serve also the picture for the NFT token, use the ARC3 NFT standard instead.
+ ///
+ /// This method validates the input request and attempts to create an ASA NFT using the
+ /// provided parameters. If the operation is successful, the response includes details such as the asset ID and
+ /// transaction hash. In case of failure, appropriate error information is returned.
+ /// The deployment request containing the necessary parameters for creating the ASA NFT, including network
+ /// details and token-specific configurations. This parameter cannot be null.
+ /// An representing the result of the operation. Returns a 200 OK response with an
+ /// if the token is created successfully. Returns a 400 Bad Request
+ /// response if the request is invalid. Returns a 500 Internal Server Error response if an unexpected error
+ /// occurs during the operation.
+ [HttpPost("asa-nft/create")]
+ [ProducesResponseType(typeof(ASATokenDeploymentResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> CreateASANFT([FromBody] ASANonFungibleTokenDeploymentRequest request)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+
+ try
+ {
+ var result = await _asaTokenService.CreateASATokenAsync(request, TokenType.ASA_NFT);
+
+ if (result.Success)
+ {
+ _logger.LogInformation("ASA token created successfully with asset ID {AssetId} and transaction {TxHash} on {Network}",
+ result.AssetId, result.TransactionId, request.Network);
+ return Ok(result);
+ }
+ else
+ {
+ _logger.LogError("ASA token creation failed: {Error}", result.ErrorMessage);
+ return StatusCode(StatusCodes.Status500InternalServerError, result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error creating ASA token");
+ return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
+ }
+ }
+
+
+ ///
+ /// Creates an ASA NFT (Algorand Standard Asset Non-Fungible Token) based on the provided deployment request. It creates basic ASA token with quantity of 1. If you want to serve also the picture for the NFT token, use the ARC3 NFT standard instead.
+ ///
+ /// This method validates the input request and attempts to create an ASA NFT using the
+ /// provided parameters. If the operation is successful, the response includes details such as the asset ID and
+ /// transaction hash. In case of failure, appropriate error information is returned.
+ /// The deployment request containing the necessary parameters for creating the ASA NFT, including network
+ /// details and token-specific configurations. This parameter cannot be null.
+ /// An representing the result of the operation. Returns a 200 OK response with an
+ /// if the token is created successfully. Returns a 400 Bad Request
+ /// response if the request is invalid. Returns a 500 Internal Server Error response if an unexpected error
+ /// occurs during the operation.
+ [HttpPost("asa-fnft/create")]
+ [ProducesResponseType(typeof(ASATokenDeploymentResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> CreateASAFNFT([FromBody] ASAFractionalNonFungibleTokenDeploymentRequest request)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+
+ try
+ {
+ var result = await _asaTokenService.CreateASATokenAsync(request, TokenType.ASA_FNFT);
+
+ if (result.Success)
+ {
+ _logger.LogInformation("ASA token created successfully with asset ID {AssetId} and transaction {TxHash} on {Network}",
+ result.AssetId, result.TransactionId, request.Network);
+ return Ok(result);
+ }
+ else
+ {
+ _logger.LogError("ASA token creation failed: {Error}", result.ErrorMessage);
+ return StatusCode(StatusCodes.Status500InternalServerError, result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error creating ASA token");
+ return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
+ }
+ }
+ ///
/// Creates a new ARC3 Fungible Token on the Algorand blockchain.
/// ARC3 tokens are Algorand Standard Assets (ASAs) that comply with the ARC3 metadata standard:
/// - Support for rich metadata including images, descriptions, and properties
@@ -135,7 +301,7 @@ public async Task CreateASAToken([FromBody] ARC3FungibleTokenDepl
[ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task CreateARC3Token([FromBody] ARC3FungibleTokenDeploymentRequest request)
+ public async Task> CreateARC3FungibleToken([FromBody] ARC3FungibleTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -144,7 +310,7 @@ public async Task CreateARC3Token([FromBody] ARC3FungibleTokenDep
try
{
- var result = await _arc3TokenService.CreateTokenAsync(request);
+ var result = await _arc3TokenService.CreateARC3TokenAsync(request, TokenType.ARC3_FT);
if (result.Success)
{
@@ -182,7 +348,7 @@ public async Task CreateARC3Token([FromBody] ARC3FungibleTokenDep
[ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task CreateARC3NFT([FromBody] ARC3FungibleTokenDeploymentRequest request)
+ public async Task> CreateARC3NFT([FromBody] ARC3NonFungibleTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -191,7 +357,7 @@ public async Task CreateARC3NFT([FromBody] ARC3FungibleTokenDeplo
try
{
- var result = await _arc3TokenService.CreateTokenAsync(request);
+ var result = await _arc3TokenService.CreateARC3TokenAsync(request, TokenType.ARC3_NFT);
if (result.Success)
{
@@ -220,7 +386,7 @@ public async Task CreateARC3NFT([FromBody] ARC3FungibleTokenDeplo
/// the asset ID and transaction hash. If the operation fails, an appropriate error response is
/// returned.
/// The deployment request containing the necessary parameters for creating the ARC3 fractional token. This must
- /// be a valid object.
+ /// be a valid object.
/// An containing the result of the operation: - A 200 OK response with an if the token is successfully created. - A 400 Bad Request response if
/// the model state is invalid. - A 500 Internal Server Error response if an error occurs during token creation.
@@ -228,7 +394,7 @@ public async Task CreateARC3NFT([FromBody] ARC3FungibleTokenDeplo
[ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task CreateARC3FractionalNFT([FromBody] ARC3FungibleTokenDeploymentRequest request)
+ public async Task> CreateARC3FractionalNFT([FromBody] ARC3FractionalNonFungibleTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -237,7 +403,7 @@ public async Task CreateARC3FractionalNFT([FromBody] ARC3Fungible
try
{
- var result = await _arc3TokenService.CreateTokenAsync(request);
+ var result = await _arc3TokenService.CreateARC3TokenAsync(request, TokenType.ARC3_FNFT);
if (result.Success)
{
@@ -258,24 +424,22 @@ public async Task CreateARC3FractionalNFT([FromBody] ARC3Fungible
}
}
///
- /// Creates a fractional ARC200 NFT based on the provided deployment request.
+ /// Creates a new ARC200 mintable token based on the provided deployment request.
///
- /// This method processes the deployment request for an ARC200 fractional NFT and returns
- /// the result of the operation. The request must be valid, as determined by model validation. If the operation
- /// succeeds, the response contains details about the created token, including its asset ID and transaction
- /// hash. If the operation fails, an error response is returned.
- /// The deployment request containing the necessary parameters for creating the ARC200 fractional NFT. This
- /// includes details such as the network, token configuration, and other required metadata.
- /// An containing the result of the operation:
- /// - A 200 OK response with the token creation details if successful.
- /// - A 400 Bad Request response if the request is invalid.
- /// - A 500 Internal Server Error response if an unexpected error occurs during
- /// processing.
- [HttpPost("arc200/create")]
- [ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
+ /// This method validates the input request and attempts to create an ARC200 mintable
+ /// token using the provided details. If the operation succeeds, the response includes the asset ID and
+ /// transaction details. In case of failure, an appropriate error response is returned.
+ /// The deployment request containing the configuration details for the ARC200 mintable token. This includes
+ /// information such as the token name, symbol, initial supply, and network.
+ /// An containing the result of the token creation operation: - A 200 OK response
+ /// with an if the token is successfully created. - A 400 Bad Request
+ /// response if the request is invalid. - A 500 Internal Server Error response if an unexpected error occurs
+ /// during the operation.
+ [HttpPost("arc200-mintable/create")]
+ [ProducesResponseType(typeof(ARC200TokenDeploymentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task CreateARC200FractionalNFT([FromBody] ARC3FungibleTokenDeploymentRequest request)
+ public async Task> ARC200MintableTokenDeploymentRequest([FromBody] ARC200MintableTokenDeploymentRequest request)
{
if (!ModelState.IsValid)
{
@@ -284,7 +448,7 @@ public async Task CreateARC200FractionalNFT([FromBody] ARC3Fungib
try
{
- var result = await _arc3TokenService.CreateTokenAsync(request);
+ var result = await _arc200TokenService.CreateARC200TokenAsync(request, TokenType.ARC200_Mintable);
if (result.Success)
{
@@ -304,74 +468,95 @@ public async Task CreateARC200FractionalNFT([FromBody] ARC3Fungib
return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
}
}
- // ///
- // /// Retrieves information about an existing ARC3 token including metadata.
- // ///
- // /// The asset ID of the ARC3 token
- // /// The Algorand network (mainnet, testnet, betanet)
- // /// Token information including metadata if available
- // [HttpGet("arc3/{assetId}")]
- // [ProducesResponseType(typeof(ARC3TokenInfo), StatusCodes.Status200OK)]
- // [ProducesResponseType(StatusCodes.Status404NotFound)]
- // [ProducesResponseType(StatusCodes.Status400BadRequest)]
- // [ProducesResponseType(StatusCodes.Status500InternalServerError)]
- // public async Task GetARC3TokenInfo(ulong assetId, [FromQuery] string network = "testnet")
- // {
- // if (string.IsNullOrWhiteSpace(network))
- // {
- // return BadRequest("Network parameter is required");
- // }
-
- // try
- // {
- // var tokenInfo = await _arc3TokenService.GetTokenInfoAsync(assetId, network);
-
- // if (tokenInfo == null)
- // {
- // _logger.LogWarning("ARC3 token with asset ID {AssetId} not found on {Network}", assetId, network);
- // return NotFound($"Token with asset ID {assetId} not found on {network}");
- // }
-
- // _logger.LogInformation("Retrieved ARC3 token info for asset ID {AssetId} on {Network}", assetId, network);
- // return Ok(tokenInfo);
- // }
- // catch (Exception ex)
- // {
- // _logger.LogError(ex, "Error retrieving ARC3 token info for asset ID {AssetId}", assetId);
- // return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
- // }
- // }
+ ///
+ /// Creates a new ARC200 preminted fungible token based on the provided deployment request.
+ ///
+ /// This method validates the input request and attempts to create an ARC200 preminted
+ /// token using the provided details. If the operation is successful, the response includes the asset ID and
+ /// transaction details. If the operation fails, an appropriate error response is returned.
+ /// The deployment request containing the details required to create the ARC200 preminted token, including
+ /// network information and token parameters. This parameter cannot be null and must pass model validation.
+ /// An containing the result of the token creation operation. Returns a 200 OK
+ /// response with an if the token is created successfully, a 400 Bad
+ /// Request response if the request is invalid, or a 500 Internal Server Error response if an unexpected error
+ /// occurs.
+ [HttpPost("arc200-preminted/create")]
+ [ProducesResponseType(typeof(ARC3TokenDeploymentResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> CreateARC200Preminted([FromBody] ARC200PremintedTokenDeploymentRequest request)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+ try
+ {
+ var result = await _arc200TokenService.CreateARC200TokenAsync(request, TokenType.ARC200_Preminted);
- // ///
- // /// Validates ARC3 metadata structure without creating a token.
- // /// Useful for testing metadata before token creation.
- // ///
- // /// ARC3 metadata to validate
- // /// Validation result
- // [HttpPost("arc3/validate-metadata")]
- // [ProducesResponseType(typeof(object), StatusCodes.Status200OK)]
- // [ProducesResponseType(StatusCodes.Status400BadRequest)]
- // public IActionResult ValidateARC3Metadata([FromBody] ARC3TokenMetadata metadata)
- // {
- // if (!ModelState.IsValid)
- // {
- // return BadRequest(ModelState);
- // }
+ if (result.Success)
+ {
+ _logger.LogInformation("ARC3 token created successfully with asset ID {AssetId} and transaction {TxHash} on {Network}",
+ result.AssetId, result.TransactionId, request.Network);
+ return Ok(result);
+ }
+ else
+ {
+ _logger.LogError("ARC3 token creation failed: {Error}", result.ErrorMessage);
+ return StatusCode(StatusCodes.Status500InternalServerError, result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error creating ARC3 token");
+ return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
+ }
+ }
+ ///
+ /// Creates a new ARC200 mintable token based on the provided deployment request.
+ ///
+ /// This method validates the input request and attempts to create an ARC200 mintable
+ /// token using the provided details. If the operation succeeds, the response includes the asset ID and
+ /// transaction details. In case of failure, an appropriate error response is returned.
+ /// The deployment request containing the configuration details for the ARC200 mintable token. This includes
+ /// information such as the token name, symbol, initial supply, and network.
+ /// An containing the result of the token creation operation: - A 200 OK response
+ /// with an if the token is successfully created. - A 400 Bad Request
+ /// response if the request is invalid. - A 500 Internal Server Error response if an unexpected error occurs
+ /// during the operation.
+ [HttpPost("arc1400-mintable/create")]
+ [ProducesResponseType(typeof(ARC200TokenDeploymentResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status400BadRequest)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> ARC1400MintableTokenDeploymentRequest([FromBody] ARC1400MintableTokenDeploymentRequest request)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
- // try
- // {
- // var (isValid, errorMessage) = _arc3TokenService.ValidateMetadata(metadata);
+ try
+ {
+ var result = await _arc1400TokenService.CreateARC1400TokenAsync(request, TokenType.ARC1400_Mintable);
- // _logger.LogInformation("ARC3 metadata validation result: {IsValid}", isValid);
- // return Ok(new { isValid, errorMessage });
- // }
- // catch (Exception ex)
- // {
- // _logger.LogError(ex, "Error validating ARC3 metadata");
- // return BadRequest(new { error = ex.Message });
- // }
- // }
+ if (result.Success)
+ {
+ _logger.LogInformation("ARC3 token created successfully with asset ID {AssetId} and transaction {TxHash} on {Network}",
+ result.AssetId, result.TransactionId, request.Network);
+ return Ok(result);
+ }
+ else
+ {
+ _logger.LogError("ARC3 token creation failed: {Error}", result.ErrorMessage);
+ return StatusCode(StatusCodes.Status500InternalServerError, result);
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error creating ARC3 token");
+ return StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.Message });
+ }
+ }
}
-}
-
+}
\ No newline at end of file
diff --git a/BiatecTokensApi/Generated/Arc1644.cs b/BiatecTokensApi/Generated/Arc1644.cs
new file mode 100644
index 0000000..c9999f3
--- /dev/null
+++ b/BiatecTokensApi/Generated/Arc1644.cs
@@ -0,0 +1,2870 @@
+using System;
+using Algorand;
+using Algorand.Algod;
+using Algorand.Algod.Model;
+using Algorand.Algod.Model.Transactions;
+using AVM.ClientGenerator;
+using AVM.ClientGenerator.Core;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AVM.ClientGenerator.ABI.ARC56;
+using Algorand.AVM.ClientGenerator.ABI.ARC56;
+
+namespace BiatecTokensApi.Generated
+{
+
+
+ public class Arc1644Proxy : ProxyBase
+ {
+ public override AppDescriptionArc56 App { get; set; }
+
+ public Arc1644Proxy(DefaultApi defaultApi, ulong appId) : base(defaultApi, appId)
+ {
+ App = Newtonsoft.Json.JsonConvert.DeserializeObject(Encoding.UTF8.GetString(Convert.FromBase64String(_ARC56DATA))) ?? throw new Exception("Error reading ARC56 data");
+
+ }
+
+ public class Structs
+ {
+ public class ApprovalStruct : AVMObjectType
+ {
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 ApprovalAmount { get; set; }
+
+ public Algorand.Address Owner { get; set; }
+
+ public Algorand.Address Spender { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vApprovalAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vApprovalAmount.From(ApprovalAmount);
+ ret.AddRange(vApprovalAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOwner = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vOwner.From(Owner);
+ ret.AddRange(vOwner.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vSpender = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vSpender.From(Spender);
+ ret.AddRange(vSpender.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static ApprovalStruct Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new ApprovalStruct();
+ uint count = 0;
+ var vApprovalAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vApprovalAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.ApprovalAmount = vApprovalAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOwner = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vOwner.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOwner = vOwner.ToValue();
+ if (valueOwner is Algorand.Address vOwnerValue) { ret.Owner = vOwnerValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vSpender = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vSpender.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueSpender = vSpender.ToValue();
+ if (valueSpender is Algorand.Address vSpenderValue) { ret.Spender = vSpenderValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as ApprovalStruct);
+ }
+ public bool Equals(ApprovalStruct? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(ApprovalStruct left, ApprovalStruct right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(ApprovalStruct left, ApprovalStruct right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410HoldingPartitionsPaginatedKey : AVMObjectType
+ {
+ public Algorand.Address Holder { get; set; }
+
+ public ulong Page { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vHolder.From(Holder);
+ ret.AddRange(vHolder.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPage = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint64");
+ vPage.From(Page);
+ ret.AddRange(vPage.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410HoldingPartitionsPaginatedKey Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410HoldingPartitionsPaginatedKey();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vHolder.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueHolder = vHolder.ToValue();
+ if (valueHolder is Algorand.Address vHolderValue) { ret.Holder = vHolderValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPage = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint64");
+ count = vPage.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePage = vPage.ToValue();
+ if (valuePage is ulong vPageValue) { ret.Page = vPageValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410HoldingPartitionsPaginatedKey);
+ }
+ public bool Equals(Arc1410HoldingPartitionsPaginatedKey? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410HoldingPartitionsPaginatedKey left, Arc1410HoldingPartitionsPaginatedKey right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410HoldingPartitionsPaginatedKey left, Arc1410HoldingPartitionsPaginatedKey right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410OperatorKey : AVMObjectType
+ {
+ public Algorand.Address Holder { get; set; }
+
+ public Algorand.Address Operator { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vHolder.From(Holder);
+ ret.AddRange(vHolder.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperator = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vOperator.From(Operator);
+ ret.AddRange(vOperator.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410OperatorKey Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410OperatorKey();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vHolder.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueHolder = vHolder.ToValue();
+ if (valueHolder is Algorand.Address vHolderValue) { ret.Holder = vHolderValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperator = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vOperator.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOperator = vOperator.ToValue();
+ if (valueOperator is Algorand.Address vOperatorValue) { ret.Operator = vOperatorValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410OperatorKey);
+ }
+ public bool Equals(Arc1410OperatorKey? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410OperatorKey left, Arc1410OperatorKey right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410OperatorKey left, Arc1410OperatorKey right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410OperatorPortionKey : AVMObjectType
+ {
+ public Algorand.Address Holder { get; set; }
+
+ public Algorand.Address Operator { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vHolder.From(Holder);
+ ret.AddRange(vHolder.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperator = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vOperator.From(Operator);
+ ret.AddRange(vOperator.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410OperatorPortionKey Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410OperatorPortionKey();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vHolder.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueHolder = vHolder.ToValue();
+ if (valueHolder is Algorand.Address vHolderValue) { ret.Holder = vHolderValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperator = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vOperator.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOperator = vOperator.ToValue();
+ if (valueOperator is Algorand.Address vOperatorValue) { ret.Operator = vOperatorValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410OperatorPortionKey);
+ }
+ public bool Equals(Arc1410OperatorPortionKey? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410OperatorPortionKey left, Arc1410OperatorPortionKey right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410OperatorPortionKey left, Arc1410OperatorPortionKey right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410PartitionKey : AVMObjectType
+ {
+ public Algorand.Address Holder { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vHolder.From(Holder);
+ ret.AddRange(vHolder.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410PartitionKey Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410PartitionKey();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vHolder = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vHolder.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueHolder = vHolder.ToValue();
+ if (valueHolder is Algorand.Address vHolderValue) { ret.Holder = vHolderValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410PartitionKey);
+ }
+ public bool Equals(Arc1410PartitionKey? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410PartitionKey left, Arc1410PartitionKey right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410PartitionKey left, Arc1410PartitionKey right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410CanTransferByPartitionReturn : AVMObjectType
+ {
+ public byte Code { get; set; }
+
+ public string Status { get; set; }
+
+ public Algorand.Address ReceiverPartition { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ vCode.From(Code);
+ ret.AddRange(vCode.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vStatus = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("string");
+ vStatus.From(Status);
+ stringRef[ret.Count] = vStatus.Encode();
+ ret.AddRange(new byte[2]);
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vReceiverPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vReceiverPartition.From(ReceiverPartition);
+ ret.AddRange(vReceiverPartition.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410CanTransferByPartitionReturn Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410CanTransferByPartitionReturn();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ count = vCode.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueCode = vCode.ToValue();
+ if (valueCode is byte vCodeValue) { ret.Code = vCodeValue; }
+ var indexStatus = queue.Dequeue() * 256 + queue.Dequeue();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vStatus = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("string");
+ vStatus.Decode(bytes.Skip(indexStatus + prefixOffset).ToArray());
+ var valueStatus = vStatus.ToValue();
+ if (valueStatus is string vStatusValue) { ret.Status = vStatusValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vReceiverPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vReceiverPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueReceiverPartition = vReceiverPartition.ToValue();
+ if (valueReceiverPartition is Algorand.Address vReceiverPartitionValue) { ret.ReceiverPartition = vReceiverPartitionValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410CanTransferByPartitionReturn);
+ }
+ public bool Equals(Arc1410CanTransferByPartitionReturn? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410CanTransferByPartitionReturn left, Arc1410CanTransferByPartitionReturn right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410CanTransferByPartitionReturn left, Arc1410CanTransferByPartitionReturn right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410PartitionIssue : AVMObjectType
+ {
+ public Algorand.Address To { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vTo.From(To);
+ ret.AddRange(vTo.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410PartitionIssue Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410PartitionIssue();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vTo.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueTo = vTo.ToValue();
+ if (valueTo is Algorand.Address vToValue) { ret.To = vToValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410PartitionIssue);
+ }
+ public bool Equals(Arc1410PartitionIssue? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410PartitionIssue left, Arc1410PartitionIssue right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410PartitionIssue left, Arc1410PartitionIssue right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410PartitionRedeem : AVMObjectType
+ {
+ public Algorand.Address From { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vFrom.From(From);
+ ret.AddRange(vFrom.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410PartitionRedeem Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410PartitionRedeem();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vFrom.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueFrom = vFrom.ToValue();
+ if (valueFrom is Algorand.Address vFromValue) { ret.From = vFromValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410PartitionRedeem);
+ }
+ public bool Equals(Arc1410PartitionRedeem? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410PartitionRedeem left, Arc1410PartitionRedeem right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410PartitionRedeem left, Arc1410PartitionRedeem right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1410PartitionTransfer : AVMObjectType
+ {
+ public Algorand.Address From { get; set; }
+
+ public Algorand.Address To { get; set; }
+
+ public Algorand.Address Partition { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vFrom.From(From);
+ ret.AddRange(vFrom.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vTo.From(To);
+ ret.AddRange(vTo.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vPartition.From(Partition);
+ ret.AddRange(vPartition.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1410PartitionTransfer Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1410PartitionTransfer();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vFrom.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueFrom = vFrom.ToValue();
+ if (valueFrom is Algorand.Address vFromValue) { ret.From = vFromValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vTo.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueTo = vTo.ToValue();
+ if (valueTo is Algorand.Address vToValue) { ret.To = vToValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vPartition = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vPartition.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valuePartition = vPartition.ToValue();
+ if (valuePartition is Algorand.Address vPartitionValue) { ret.Partition = vPartitionValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1410PartitionTransfer);
+ }
+ public bool Equals(Arc1410PartitionTransfer? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1410PartitionTransfer left, Arc1410PartitionTransfer right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1410PartitionTransfer left, Arc1410PartitionTransfer right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1594IssueEvent : AVMObjectType
+ {
+ public Algorand.Address To { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vTo.From(To);
+ ret.AddRange(vTo.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1594IssueEvent Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1594IssueEvent();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vTo.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueTo = vTo.ToValue();
+ if (valueTo is Algorand.Address vToValue) { ret.To = vToValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1594IssueEvent);
+ }
+ public bool Equals(Arc1594IssueEvent? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1594IssueEvent left, Arc1594IssueEvent right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1594IssueEvent left, Arc1594IssueEvent right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1594RedeemEvent : AVMObjectType
+ {
+ public Algorand.Address From { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vFrom.From(From);
+ ret.AddRange(vFrom.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1594RedeemEvent Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1594RedeemEvent();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vFrom.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueFrom = vFrom.ToValue();
+ if (valueFrom is Algorand.Address vFromValue) { ret.From = vFromValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1594RedeemEvent);
+ }
+ public bool Equals(Arc1594RedeemEvent? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1594RedeemEvent left, Arc1594RedeemEvent right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1594RedeemEvent left, Arc1594RedeemEvent right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1644ControllerChangedEvent : AVMObjectType
+ {
+ public Algorand.Address Old { get; set; }
+
+ public Algorand.Address Neu { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOld = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vOld.From(Old);
+ ret.AddRange(vOld.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vNeu = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vNeu.From(Neu);
+ ret.AddRange(vNeu.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1644ControllerChangedEvent Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1644ControllerChangedEvent();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOld = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vOld.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOld = vOld.ToValue();
+ if (valueOld is Algorand.Address vOldValue) { ret.Old = vOldValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vNeu = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vNeu.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueNeu = vNeu.ToValue();
+ if (valueNeu is Algorand.Address vNeuValue) { ret.Neu = vNeuValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1644ControllerChangedEvent);
+ }
+ public bool Equals(Arc1644ControllerChangedEvent? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1644ControllerChangedEvent left, Arc1644ControllerChangedEvent right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1644ControllerChangedEvent left, Arc1644ControllerChangedEvent right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1644ControllerRedeemEvent : AVMObjectType
+ {
+ public Algorand.Address Controller { get; set; }
+
+ public Algorand.Address From { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte Code { get; set; }
+
+ public byte[] OperatorData { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vController = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vController.From(Controller);
+ ret.AddRange(vController.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vFrom.From(From);
+ ret.AddRange(vFrom.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ vCode.From(Code);
+ ret.AddRange(vCode.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperatorData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vOperatorData.From(OperatorData);
+ ret.AddRange(vOperatorData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1644ControllerRedeemEvent Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1644ControllerRedeemEvent();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vController = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vController.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueController = vController.ToValue();
+ if (valueController is Algorand.Address vControllerValue) { ret.Controller = vControllerValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vFrom.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueFrom = vFrom.ToValue();
+ if (valueFrom is Algorand.Address vFromValue) { ret.From = vFromValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ count = vCode.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueCode = vCode.ToValue();
+ if (valueCode is byte vCodeValue) { ret.Code = vCodeValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperatorData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vOperatorData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOperatorData = vOperatorData.ToValue();
+ if (valueOperatorData is byte[] vOperatorDataValue) { ret.OperatorData = vOperatorDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1644ControllerRedeemEvent);
+ }
+ public bool Equals(Arc1644ControllerRedeemEvent? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1644ControllerRedeemEvent left, Arc1644ControllerRedeemEvent right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1644ControllerRedeemEvent left, Arc1644ControllerRedeemEvent right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ public class Arc1644ControllerTransferEvent : AVMObjectType
+ {
+ public Algorand.Address Controller { get; set; }
+
+ public Algorand.Address From { get; set; }
+
+ public Algorand.Address To { get; set; }
+
+ public AVM.ClientGenerator.ABI.ARC4.Types.UInt256 Amount { get; set; }
+
+ public byte Code { get; set; }
+
+ public byte[] Data { get; set; }
+
+ public byte[] OperatorData { get; set; }
+
+ public byte[] ToByteArray()
+ {
+ var ret = new List();
+ var stringRef = new Dictionary();
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vController = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vController.From(Controller);
+ ret.AddRange(vController.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vFrom.From(From);
+ ret.AddRange(vFrom.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ vTo.From(To);
+ ret.AddRange(vTo.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vAmount = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("uint256");
+ vAmount.From(Amount);
+ ret.AddRange(vAmount.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ vCode.From(Code);
+ ret.AddRange(vCode.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vData.From(Data);
+ ret.AddRange(vData.Encode());
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperatorData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ vOperatorData.From(OperatorData);
+ ret.AddRange(vOperatorData.Encode());
+ foreach (var item in stringRef)
+ {
+ var b1 = ret.Count;
+ ret[item.Key] = Convert.ToByte(b1 / 256);
+ ret[item.Key + 1] = Convert.ToByte(b1 % 256);
+ ret.AddRange(item.Value);
+ }
+ return ret.ToArray();
+
+ }
+
+ public static Arc1644ControllerTransferEvent Parse(byte[] bytes)
+ {
+ var queue = new Queue(bytes);
+ var prefixOffset = 0;
+ var retPrefix = new byte[4] { bytes[0], bytes[1], bytes[2], bytes[3] };
+ if (retPrefix.SequenceEqual(Constants.RetPrefix))
+ {
+ prefixOffset = 4;
+ for (int i = 0; i < 4 && queue.Count > 0; i++) { queue.Dequeue(); }
+ }
+ var ret = new Arc1644ControllerTransferEvent();
+ uint count = 0;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vController = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vController.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueController = vController.ToValue();
+ if (valueController is Algorand.Address vControllerValue) { ret.Controller = vControllerValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vFrom = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vFrom.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueFrom = vFrom.ToValue();
+ if (valueFrom is Algorand.Address vFromValue) { ret.From = vFromValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vTo = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("address");
+ count = vTo.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueTo = vTo.ToValue();
+ if (valueTo is Algorand.Address vToValue) { ret.To = vToValue; }
+ var vAmount = new AVM.ClientGenerator.ABI.ARC4.Types.UInt256();
+ count = vAmount.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ ret.Amount = vAmount;
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vCode = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte");
+ count = vCode.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueCode = vCode.ToValue();
+ if (valueCode is byte vCodeValue) { ret.Code = vCodeValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueData = vData.ToValue();
+ if (valueData is byte[] vDataValue) { ret.Data = vDataValue; }
+ AVM.ClientGenerator.ABI.ARC4.Types.WireType vOperatorData = AVM.ClientGenerator.ABI.ARC4.Types.WireType.FromABIDescription("byte[]");
+ count = vOperatorData.Decode(queue.ToArray());
+ for (int i = 0; i < Convert.ToInt32(count); i++) { queue.Dequeue(); }
+ var valueOperatorData = vOperatorData.ToValue();
+ if (valueOperatorData is byte[] vOperatorDataValue) { ret.OperatorData = vOperatorDataValue; }
+ return ret;
+
+ }
+
+ public override string ToString()
+ {
+ return $"{this.GetType().ToString()} {BitConverter.ToString(ToByteArray()).Replace("-", "")}";
+ }
+ public override bool Equals(object? obj)
+ {
+ return Equals(obj as Arc1644ControllerTransferEvent);
+ }
+ public bool Equals(Arc1644ControllerTransferEvent? other)
+ {
+ return other is not null && ToByteArray().SequenceEqual(other.ToByteArray());
+ }
+ public override int GetHashCode()
+ {
+ return ToByteArray().GetHashCode();
+ }
+ public static bool operator ==(Arc1644ControllerTransferEvent left, Arc1644ControllerTransferEvent right)
+ {
+ return EqualityComparer.Default.Equals(left, right);
+ }
+ public static bool operator !=(Arc1644ControllerTransferEvent left, Arc1644ControllerTransferEvent right)
+ {
+ return !(left == right);
+ }
+
+ }
+
+ }
+
+ ///
+ ///
+ ///
+ ///
+ public async Task Arc1644SetController(Address new_controller, Account _tx_sender, ulong? _tx_fee, string _tx_note = "", ulong _tx_roundValidity = 1000, List? _tx_boxes = null, List? _tx_transactions = null, List? _tx_assets = null, List? _tx_apps = null, List? _tx_accounts = null, AVM.ClientGenerator.Core.OnCompleteType _tx_callType = AVM.ClientGenerator.Core.OnCompleteType.NoOp)
+ {
+ _tx_boxes ??= new List();
+ _tx_transactions ??= new List();
+ _tx_assets ??= new List();
+ _tx_apps ??= new List();
+ _tx_accounts ??= new List();
+ _tx_accounts.AddRange(new List { new_controller });
+ byte[] abiHandle = { 4, 84, 114, 208 };
+ var new_controllerAbi = new AVM.ClientGenerator.ABI.ARC4.Types.Address(); new_controllerAbi.From(new_controller);
+
+ var result = await base.CallApp(new List