diff --git a/abis/MyVRC25.json b/abis/MyVRC25.json
new file mode 100644
index 0000000..a121127
--- /dev/null
+++ b/abis/MyVRC25.json
@@ -0,0 +1,521 @@
+{
+ "contractName": "MyVRC25",
+ "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"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "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": true,
+ "internalType": "address",
+ "name": "issuer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Fee",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "fee",
+ "type": "uint256"
+ }
+ ],
+ "name": "FeeUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "acceptOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "estimateFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "issuer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "minFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "fee",
+ "type": "uint256"
+ }
+ ],
+ "name": "setFee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "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"
+ }
+ ],
+ "bytecode": "0x6101406040523480156200001257600080fd5b5060405162002c3138038062002c31833981810160405260808110156200003857600080fd5b81019080805160405193929190846401000000008211156200005957600080fd5b838201915060208201858111156200007057600080fd5b82518660018202830111640100000000821117156200008e57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c4578082015181840152602081019050620000a7565b50505050905090810190601f168015620000f25780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011657600080fd5b838201915060208201858111156200012d57600080fd5b82518660018202830111640100000000821117156200014b57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018157808201518184015260208101905062000164565b50505050905090810190601f168015620001af5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805190602001909291905050506040518060400160405280600581526020017f56524332350000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508585858260059080519060200190620002549291906200067f565b5081600690805190602001906200026d9291906200067f565b5080600760006101000a81548160ff021916908360ff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250506200032b620003ad60201b60201c565b60a0818152505062000345818484620003b560201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508061012081815250505050505050620003a333826200042c60201b60201c565b5050505062000735565b600046905090565b6000838383620003ca620003ad60201b60201c565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f56524332353a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620004ec81600854620005f660201b620014ab1790919060201c565b6008819055506200054a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620005f660201b620014ab1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008082840190508381101562000675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620006b7576000855562000703565b82601f10620006d257805160ff191683800117855562000703565b8280016001018555821562000703579182015b8281111562000702578251825591602001919060010190620006e5565b5b50905062000712919062000716565b5090565b5b808211156200073157600081600090555060010162000717565b5090565b60805160a05160c05160601c60e05161010051610120516124af6200078260003980611d46525080611d88525080611d67525080611c95525080611ceb525080611d1b52506124af6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806342966c68116100b85780638da5cb5b1161007c5780638da5cb5b1461052757806395d89b411461055b578063a9059cbb146105de578063d505accf14610642578063dd62ed3e146106db578063f2fde38b1461075357610137565b806342966c68146103fb57806369fe0e2d1461043f57806370a082311461046d57806379ba5097146104c55780637ecebe00146104cf57610137565b80631d143848116100ff5780631d143848146102e657806323b872dd1461031a57806324ec75901461039e578063313ce567146103bc5780633644e515146103dd57610137565b806301ffc9a71461013c57806306fdde031461019f578063095ea7b314610222578063127e8e4d1461028657806318160ddd146102c8575b600080fd5b6101876004803603602081101561015257600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610797565b60405180821515815260200191505060405180910390f35b6101a7610811565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e75780820151818401526020810190506101cc565b50505050905090810190601f1680156102145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61026e6004803603604081101561023857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108b3565b60405180821515815260200191505060405180910390f35b6102b26004803603602081101561029c57600080fd5b81019080803590602001909291905050506108e3565b6040518082815260200191505060405180910390f35b6102d0610923565b6040518082815260200191505060405180910390f35b6102ee61092d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103866004803603606081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610957565b60405180821515815260200191505060405180910390f35b6103a6610bac565b6040518082815260200191505060405180910390f35b6103c4610bb6565b604051808260ff16815260200191505060405180910390f35b6103e5610bcd565b6040518082815260200191505060405180910390f35b6104276004803603602081101561041157600080fd5b8101908080359060200190929190505050610bdc565b60405180821515815260200191505060405180910390f35b61046b6004803603602081101561045557600080fd5b8101908080359060200190929190505050610c0a565b005b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d0e565b6040518082815260200191505060405180910390f35b6104cd610d56565b005b610511600480360360208110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f47565b6040518082815260200191505060405180910390f35b61052f610f90565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610563610fba565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105a3578082015181840152602081019050610588565b50505050905090810190601f1680156105d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61062a600480360360408110156105f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b60405180821515815260200191505060405180910390f35b6106d9600480360360e081101561065857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061108b565b005b61073d600480360360408110156106f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611297565b6040518082815260200191505060405180910390f35b6107956004803603602081101561076957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061131e565b005b60007f08617865000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061080a575061080982611533565b5b9050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050905090565b6000806108c060006108e3565b90506108cd33858561159d565b6108d8333083611794565b600191505092915050565b60006109043373ffffffffffffffffffffffffffffffffffffffff16611898565b15610912576000905061091e565b61091b826118ab565b90505b919050565b6000600854905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080610963836108e3565b905061097881846114ab90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a20616d6f756e742065786565647320616c6c6f77616e6365000081525060200191505060405180910390fd5b610b0a81610afc85600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118be90919063ffffffff16565b6118be90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b95858585611941565b610ba0858583611794565b60019150509392505050565b6000600154905090565b6000600760009054906101000a900460ff16905090565b6000610bd7611c91565b905090565b600080610be960006108e3565b9050610bf53384611db2565b610c00333083611794565b6001915050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ccd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a2063616c6c6572206973206e6f7420746865206f776e6572000081525060200191505060405180910390fd5b806001819055507f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76816040518082815260200191505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612450602a913960400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110525780601f1061102757610100808354040283529160200191611052565b820191906000526020600020905b81548152906001019060200180831161103557829003601f168201915b5050505050905090565b600080611068836108e3565b9050611075338585611941565b611080338583611794565b600191505092915050565b83421115611101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f56524332353a205065726d69742065787069726564000000000000000000000081525060200191505060405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111308c612004565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060006111b38261205b565b905060006111c3828787876120c2565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f56524332353a20496e76616c6964207065726d6974000000000000000000000081525060200191505060405180910390fd5b600061127260006108e3565b905061127f8b8b8b61159d565b61128a8b3083611794565b5050505050505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a2063616c6c6572206973206e6f7420746865206f776e6572000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611467576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806123e96024913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60007f08617865000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806123a36024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061240d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6117b33373ffffffffffffffffffffffffffffffffffffffff16611898565b156117bd57611893565b6000811115611892576117f383600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611941565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99846040518082815260200191505060405180910390a45b5b505050565b600080823b905060008111915050919050565b60006118b5610bac565b82019050919050565b600082821115611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061235c6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806123396023913960400191505060405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611b01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f56524332353a20696e7375666669656e742062616c616e63650000000000000081525060200191505060405180910390fd5b611b52816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118be90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611be5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114ab90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611d1457507f0000000000000000000000000000000000000000000000000000000000000000611d126122c1565b145b15611d41577f00000000000000000000000000000000000000000000000000000000000000009050611daf565b611dac7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006122c9565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061242f6021913960400191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611eec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f56524332353a20696e7375666669656e742062616c616e63650000000000000081525060200191505060405180910390fd5b611f01816008546118be90919063ffffffff16565b600881905550611f58816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118be90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6000612065611c91565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612140576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123816022913960400191505060405180910390fd5b601b8460ff1614806121555750601c8460ff16145b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123c76022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612206573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b80915050949350505050565b600046905090565b60008383836122d66122c1565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001209050939250505056fe56524332353a207472616e7366657220746f20746865207a65726f206164647265737356524332353a207472616e736665722066726f6d20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756556524332353a20617070726f76652066726f6d20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202776272076616c756556524332353a206e6577206f776e657220697320746865207a65726f206164647265737356524332353a20617070726f766520746f20746865207a65726f206164647265737356524332353a206275726e2066726f6d20746865207a65726f206164647265737356524332353a206f6e6c79206e6577206f776e65722063616e20616363657074206f776e657273686970a2646970667358221220d7bd4c30dbd4d3ce9b25c41a8493aacbd92222fce271fa6ee6736e88c8f4fb3f64736f6c63430007060033"
+}
\ No newline at end of file
diff --git a/abis/MyVRC25Mintable.json b/abis/MyVRC25Mintable.json
new file mode 100644
index 0000000..f402810
--- /dev/null
+++ b/abis/MyVRC25Mintable.json
@@ -0,0 +1,545 @@
+{
+ "contractName": "MyVRC25Mintable",
+ "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"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "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": true,
+ "internalType": "address",
+ "name": "issuer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Fee",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "fee",
+ "type": "uint256"
+ }
+ ],
+ "name": "FeeUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "DOMAIN_SEPARATOR",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "acceptOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "estimateFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "issuer",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "minFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "nonces",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "deadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint8",
+ "name": "v",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "r",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "s",
+ "type": "bytes32"
+ }
+ ],
+ "name": "permit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "fee",
+ "type": "uint256"
+ }
+ ],
+ "name": "setFee",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "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": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "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"
+ }
+ ],
+ "bytecode": "0x6101406040523480156200001257600080fd5b5060405162002f3438038062002f34833981810160405260808110156200003857600080fd5b81019080805160405193929190846401000000008211156200005957600080fd5b838201915060208201858111156200007057600080fd5b82518660018202830111640100000000821117156200008e57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c4578082015181840152602081019050620000a7565b50505050905090810190601f168015620000f25780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011657600080fd5b838201915060208201858111156200012d57600080fd5b82518660018202830111640100000000821117156200014b57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018157808201518184015260208101905062000164565b50505050905090810190601f168015620001af5780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805190602001909291905050506040518060400160405280600581526020017f56524332350000000000000000000000000000000000000000000000000000008152506040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508585858260059080519060200190620002549291906200067f565b5081600690805190602001906200026d9291906200067f565b5080600760006101000a81548160ff021916908360ff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250506200032b620003ad60201b60201c565b60a0818152505062000345818484620003b560201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508061012081815250505050505050620003a333826200042c60201b60201c565b5050505062000735565b600046905090565b6000838383620003ca620003ad60201b60201c565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f56524332353a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620004ec81600854620005f660201b620015f31790919060201c565b6008819055506200054a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620005f660201b620015f31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008082840190508381101562000675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620006b7576000855562000703565b82601f10620006d257805160ff191683800117855562000703565b8280016001018555821562000703579182015b8281111562000702578251825591602001919060010190620006e5565b5b50905062000712919062000716565b5090565b5b808211156200073157600081600090555060010162000717565b5090565b60805160a05160c05160601c60e05161010051610120516127b26200078260003980611e8e525080611ed0525080611eaf525080611ddd525080611e33525080611e6352506127b26000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806342966c68116100b85780638da5cb5b1161007c5780638da5cb5b1461059657806395d89b41146105ca578063a9059cbb1461064d578063d505accf146106b1578063dd62ed3e1461074a578063f2fde38b146107c257610142565b806342966c681461046a57806369fe0e2d146104ae57806370a08231146104dc57806379ba5097146105345780637ecebe001461053e57610142565b80631d1438481161010a5780631d143848146102f157806323b872dd1461032557806324ec7590146103a9578063313ce567146103c75780633644e515146103e857806340c10f191461040657610142565b806301ffc9a71461014757806306fdde03146101aa578063095ea7b31461022d578063127e8e4d1461029157806318160ddd146102d3575b600080fd5b6101926004803603602081101561015d57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610806565b60405180821515815260200191505060405180910390f35b6101b2610880565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f25780820151818401526020810190506101d7565b50505050905090810190601f16801561021f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102796004803603604081101561024357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610922565b60405180821515815260200191505060405180910390f35b6102bd600480360360208110156102a757600080fd5b8101908080359060200190929190505050610952565b6040518082815260200191505060405180910390f35b6102db610992565b6040518082815260200191505060405180910390f35b6102f961099c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103916004803603606081101561033b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109c6565b60405180821515815260200191505060405180910390f35b6103b1610c1b565b6040518082815260200191505060405180910390f35b6103cf610c25565b604051808260ff16815260200191505060405180910390f35b6103f0610c3c565b6040518082815260200191505060405180910390f35b6104526004803603604081101561041c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c4b565b60405180821515815260200191505060405180910390f35b6104966004803603602081101561048057600080fd5b8101908080359060200190929190505050610d24565b60405180821515815260200191505060405180910390f35b6104da600480360360208110156104c457600080fd5b8101908080359060200190929190505050610d52565b005b61051e600480360360208110156104f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e56565b6040518082815260200191505060405180910390f35b61053c610e9e565b005b6105806004803603602081101561055457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061108f565b6040518082815260200191505060405180910390f35b61059e6110d8565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105d2611102565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106125780820151818401526020810190506105f7565b50505050905090810190601f16801561063f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106996004803603604081101561066357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111a4565b60405180821515815260200191505060405180910390f35b610748600480360360e08110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506111d3565b005b6107ac6004803603604081101561076057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113df565b6040518082815260200191505060405180910390f35b610804600480360360208110156107d857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611466565b005b60007f08617865000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087957506108788261167b565b5b9050919050565b606060058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109185780601f106108ed57610100808354040283529160200191610918565b820191906000526020600020905b8154815290600101906020018083116108fb57829003601f168201915b5050505050905090565b60008061092f6000610952565b905061093c3385856116e5565b6109473330836118dc565b600191505092915050565b60006109733373ffffffffffffffffffffffffffffffffffffffff166119e0565b15610981576000905061098d565b61098a826119f3565b90505b919050565b6000600854905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806109d283610952565b90506109e781846115f390919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a20616d6f756e742065786565647320616c6c6f77616e6365000081525060200191505060405180910390fd5b610b7981610b6b85600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0690919063ffffffff16565b611a0690919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610c04858585611a89565b610c0f8585836118dc565b60019150509392505050565b6000600154905090565b6000600760009054906101000a900460ff16905090565b6000610c46611dd9565b905090565b60003373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a2063616c6c6572206973206e6f7420746865206f776e6572000081525060200191505060405180910390fd5b610d1a8383611efa565b6001905092915050565b600080610d316000610952565b9050610d3d33846120b5565b610d483330836118dc565b6001915050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a2063616c6c6572206973206e6f7420746865206f776e6572000081525060200191505060405180910390fd5b806001819055507f8c4d35e54a3f2ef1134138fd8ea3daee6a3c89e10d2665996babdf70261e2c76816040518082815260200191505060405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612753602a913960400191505060405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561119a5780601f1061116f5761010080835404028352916020019161119a565b820191906000526020600020905b81548152906001019060200180831161117d57829003601f168201915b5050505050905090565b6000806111b083610952565b90506111bd338585611a89565b6111c83385836118dc565b600191505092915050565b83421115611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f56524332353a205065726d69742065787069726564000000000000000000000081525060200191505060405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886112788c612307565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405160208183030381529060405280519060200120905060006112fb8261235e565b9050600061130b828787876123c5565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f56524332353a20496e76616c6964207065726d6974000000000000000000000081525060200191505060405180910390fd5b60006113ba6000610952565b90506113c78b8b8b6116e5565b6113d28b30836118dc565b5050505050505050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f56524332353a2063616c6c6572206973206e6f7420746865206f776e6572000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806126ec6024913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080828401905083811015611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60007f08617865000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561176b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806126a66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806127106022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6118fb3373ffffffffffffffffffffffffffffffffffffffff166119e0565b15611905576119db565b60008111156119da5761193b83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611a89565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167ffcf5b3276434181e3c48bd3fe569b8939808f11e845d4b963693b9d7dbd6dd99846040518082815260200191505060405180910390a45b5b505050565b600080823b905060008111915050919050565b60006119fd610c1b565b82019050919050565b600082821115611a7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b818303905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061265f6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061263c6023913960400191505060405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611c49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f56524332353a20696e7375666669656e742062616c616e63650000000000000081525060200191505060405180910390fd5b611c9a816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d2d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611e5c57507f0000000000000000000000000000000000000000000000000000000000000000611e5a6125c4565b145b15611e89577f00000000000000000000000000000000000000000000000000000000000000009050611ef7565b611ef47f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006125cc565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f56524332353a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b611fb2816008546115f390919063ffffffff16565b600881905550612009816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115f390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561213b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806127326021913960400191505060405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156121ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f56524332353a20696e7375666669656e742062616c616e63650000000000000081525060200191505060405180910390fd5b61220481600854611a0690919063ffffffff16565b60088190555061225b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a0690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050559050919050565b6000612368611dd9565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612443576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126846022913960400191505060405180910390fd5b601b8460ff1614806124585750601c8460ff16145b6124ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806126ca6022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612509573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f45434453413a20696e76616c6964207369676e6174757265000000000000000081525060200191505060405180910390fd5b80915050949350505050565b600046905090565b60008383836125d96125c4565b30604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001209050939250505056fe56524332353a207472616e7366657220746f20746865207a65726f206164647265737356524332353a207472616e736665722066726f6d20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c756556524332353a20617070726f76652066726f6d20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202776272076616c756556524332353a206e6577206f776e657220697320746865207a65726f206164647265737356524332353a20617070726f766520746f20746865207a65726f206164647265737356524332353a206275726e2066726f6d20746865207a65726f206164647265737356524332353a206f6e6c79206e6577206f776e65722063616e20616363657074206f776e657273686970a26469706673582212208da4806d36c28add90dfad526e95eb9ddade326eba757db73b96a5a20add7e7064736f6c63430007060033"
+}
\ No newline at end of file
diff --git a/apis/account.js b/apis/account.js
index 7677dc8..cf27d86 100644
--- a/apis/account.js
+++ b/apis/account.js
@@ -4,7 +4,7 @@ const config = require('config')
const router = express.Router()
const { check, validationResult, query } = require('express-validator/check')
const axios = require('axios')
-// const web3 = require('../models/blockchain/web3')
+const web3 = require('../models/blockchain/web3')
const urljoin = require('url-join')
function serializeQuery (params, prefix) {
@@ -35,7 +35,7 @@ router.get('/:account', [
try {
const account = req.params.account.toLowerCase()
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/accounts/${account}`)
+ urljoin(config.get('tomoscanAPI'), `/api/account/${account}`)
)
return res.json(data)
} catch (error) {
@@ -47,21 +47,22 @@ router.get('/:account/listTokens', [
query('limit')
.isInt({ min: 0, max: 200 }).optional().withMessage('limit should greater than 0 and less than 200'),
query('page').isNumeric({ no_symbols: true }).optional().withMessage('page must be number'),
- check('account').exists().isLength({ min: 42, max: 42 }).withMessage('Account address is incorrect.')
+ check('account').exists().custom((account) => web3.utils.isAddress(account))
+ .withMessage('Account address is incorrect.')
], async (req, res, next) => {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return next(errors.array())
}
try {
- const account = (req.params.account || '').toLowerCase()
+ const account = web3.utils.toChecksumAddress(req.params.account)
const params = {
- limit: req.query.limit || 1,
- page: req.query.page || 1
+ limit: req.query.limit || 1
}
+ params.offset = ((req.query.page || 1) - 1) * params.limit
const query = serializeQuery(params)
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/accounts/${account}/listTokens?${query}`)
+ urljoin(config.get('tomoscanAPI'), `/api/token/listByOwner?owner=${account}&${query}`)
)
return res.json(data)
} catch (error) {
diff --git a/apis/token.js b/apis/token.js
index 1b88dc8..97d9b23 100644
--- a/apis/token.js
+++ b/apis/token.js
@@ -79,7 +79,7 @@ router.post('/createToken', [
check('decimals').exists().withMessage("'decimal' is required"),
check('totalSupply').exists().withMessage("'totalSupply' is required"),
check('type').exists().withMessage("'type' is required")
- .isIn(['trc20', 'trc21']).withMessage("'type' should be 'trc20' or 'trc21'"),
+ .isIn(['trc20', 'trc21', 'vrc25']).withMessage("'type' should be 'trc20' or 'trc21'"),
check('minFee').isFloat({ min: 0 }).exists().withMessage("'minFee' is required"),
check('mintable').exists().isBoolean().withMessage("'mintable' must be true or false")
], async function (req, res, next) {
@@ -100,7 +100,10 @@ router.post('/createToken', [
let contractCode
let p
if (mintable) {
- if (type === 'trc21') {
+ if (type === 'vrc25') {
+ p = path.resolve(__dirname, '../contracts', 'MyVRC25Mintable.sol')
+ contractCode = fs.readFileSync(p, 'UTF-8')
+ } else if (type === 'trc21') {
p = path.resolve(__dirname, '../contracts', 'TRC21Mintable.sol')
contractCode = fs.readFileSync(p, 'UTF-8')
} else {
@@ -108,7 +111,10 @@ router.post('/createToken', [
contractCode = fs.readFileSync(p, 'UTF-8')
}
} else {
- if (type === 'trc21') {
+ if (type === 'vrc25') {
+ p = path.resolve(__dirname, '../contracts', 'MyVRC25.sol')
+ contractCode = fs.readFileSync(p, 'UTF-8')
+ } else if (type === 'trc21') {
p = path.resolve(__dirname, '../contracts', 'TRC21.sol')
contractCode = fs.readFileSync(p, 'UTF-8')
} else {
@@ -381,11 +387,15 @@ router.get('/getToken', async function (req, res, next) {
}
})
-router.get('/:token', [], async (req, res, next) => {
+router.get('/:token', [
+ check('token').exists().custom(
+ (token) => web3.utils.isAddress(token)
+ ).withMessage('token address is incorrect.')
+], async (req, res, next) => {
try {
- const token = req.params.token || ''
+ const token = web3.utils.toChecksumAddress(req.params.token)
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/tokens/${token}`)
+ urljoin(config.get('tomoscanAPI'), `/api/token/${token}`)
)
return res.json(data)
} catch (error) {
@@ -406,26 +416,38 @@ router.get('/holders/trc21/:token', [], async (req, res, next) => {
return next(error)
}
})
-router.get('/holders/:token', [], async (req, res, next) => {
+router.get('/holders/:token', [
+ check('token').exists().custom(
+ (token) => web3.utils.isAddress(token)
+ ).withMessage('token address is incorrect.')
+], async (req, res, next) => {
try {
- const token = req.params.token || ''
+ const token = web3.utils.toChecksumAddress(req.params.token)
const page = req.query.page || 1
const limit = req.query.limit || 20
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/token-holders/?address=${token}&page=${page}&limit=${limit}`)
+ urljoin(config.get('tomoscanAPI'), `/api/tokenHolder/${token}?offset=${(page - 1) * limit}&limit=${limit}`)
)
return res.json(data)
} catch (error) {
return next(error)
}
})
-router.get('/txes/trc20/:token', [], async (req, res, next) => {
+
+router.get('/nft/txs/:token', [
+ check('token').exists().custom(
+ (token) => web3.utils.isAddress(token)
+ ).withMessage('token address is incorrect.')
+], async (req, res, next) => {
try {
- const token = req.params.token || ''
+ const token = web3.utils.toChecksumAddress(req.params.token)
const page = req.query.page || 1
const limit = req.query.limit || 20
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/token-txs/trc20?token=${token}&page=${page}&limit=${limit}`)
+ urljoin(
+ config.get('tomoscanAPI'),
+ `/api/tokenTx/nft/list?tokenAddress=${token}&offset=${(page - 1) * limit}&limit=${limit}`
+ )
)
return res.json(data)
} catch (error) {
@@ -433,13 +455,20 @@ router.get('/txes/trc20/:token', [], async (req, res, next) => {
}
})
-router.get('/txes/trc21/:token', [], async (req, res, next) => {
+router.get('/txs/:token', [
+ check('token').exists().custom(
+ (token) => web3.utils.isAddress(token)
+ ).withMessage('token address is incorrect.')
+], async (req, res, next) => {
try {
- const token = req.params.token || ''
+ const token = web3.utils.toChecksumAddress(req.params.token)
const page = req.query.page || 1
const limit = req.query.limit || 20
const { data } = await axios.get(
- urljoin(config.get('tomoscanAPI'), `/api/token-txs/trc21?token=${token}&page=${page}&limit=${limit}`)
+ urljoin(
+ config.get('tomoscanAPI'),
+ `/api/tokenTx/list?tokenAddress=${token}&offset=${(page - 1) * limit}&limit=${limit}`
+ )
)
return res.json(data)
} catch (error) {
diff --git a/app/app.js b/app/app.js
index 00f631a..397647c 100644
--- a/app/app.js
+++ b/app/app.js
@@ -11,6 +11,8 @@ import MyTRC21Abi from '../build/contracts/MyTRC21'
import MyTRC21MintableAbi from '../build/contracts/MyTRC21Mintable'
import MyTRC20Abi from '../build/contracts/MyTRC20'
import MyTRC20MintableAbi from '../build/contracts/MyTRC20Mintable'
+import MyVRC25Abi from '../build/contracts/MyVRC25'
+import MyVRC25MintableAbi from '../build/contracts/MyVRC25Mintable'
import Web3 from 'web3'
import { BootstrapVue, BootstrapVueIcons } from 'bootstrap-vue'
@@ -90,6 +92,8 @@ Vue.prototype.setupProvider = async function (provider, wjs) {
Vue.prototype.MyTRC21Mintable = MyTRC21MintableAbi
Vue.prototype.MyTRC20 = MyTRC20Abi
Vue.prototype.MyTRC20Mintable = MyTRC20MintableAbi
+ Vue.prototype.MyVRC25 = MyVRC25Abi
+ Vue.prototype.MyVRC25Mintable = MyVRC25MintableAbi
if (chainConfig.issuerAddress) {
Vue.prototype.TRC21Issuer = new wjs.eth.Contract(
TRC21IssuerAritfacts.abi,
diff --git a/app/assets/scss/components/_token.scss b/app/assets/scss/components/_token.scss
index 8cee10a..4e12c46 100644
--- a/app/assets/scss/components/_token.scss
+++ b/app/assets/scss/components/_token.scss
@@ -51,7 +51,7 @@
margin-left: 5px;
}
.apply-tomoz {
- background: $background-violet;
+ background: $background-blue;
@include fsz(14);
// border-radius: 30px;
padding: 2px 10px;
diff --git a/app/assets/scss/settings/_colors.scss b/app/assets/scss/settings/_colors.scss
index 1eca90e..5daaa33 100644
--- a/app/assets/scss/settings/_colors.scss
+++ b/app/assets/scss/settings/_colors.scss
@@ -39,8 +39,8 @@ $background-white: #ffffff;
$background-oranges: #141414;
$background-blue: #766B60;
$background-blue-active: #766B60;
-$background-violet: #5565c7;
-$background-violet-active: #3D4DAC;
+$background-violet: #766B60;
+$background-violet-active: #766B60;
$background-primary: #EBE9E5;
diff --git a/app/components/Token.vue b/app/components/Token.vue
index 75b7c88..e8d233e 100644
--- a/app/components/Token.vue
+++ b/app/components/Token.vue
@@ -9,6 +9,11 @@
v-if="!moreInfo">
{{ token.symbol }}
+
+ VRC-25
+
@@ -51,15 +56,16 @@
- {{ token.hash }} + {{ token.address }}
@@ -220,7 +188,7 @@Decimals
{{ token.decimals }}
-
Transactions fee
VRC-21 fee fund
+VRC fee fund