{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20",
  "sourceName": "contracts/soma/SomaSwap/test/ERC20.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_totalSupply",
          "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": 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": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "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": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": [],
      "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": "0x608060405234801561001057600080fd5b50604051610a4a380380610a4a83398101604081905261002f916101cf565b604080518082018252600a8152692a32b9ba102a37b5b2b760b11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f81e8ad438398ab0d4a2a7ecb159490c091bb27c67ace5181f70084e30fadaea2818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015246608082018190523060a0808401919091528451808403909101815260c0909201909352805191012060035561010c3383610113565b5050610209565b61012c816000546101ba60201b6105181790919060201c565b60009081556001600160a01b03831681526001602090815260409091205461015d9183906105186101ba821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906101ae9085815260200190565b60405180910390a35050565b60006101c682846101e8565b90505b92915050565b6000602082840312156101e157600080fd5b5051919050565b808201808211156101c957634e487b7160e01b600052601160045260246000fd5b610832806102186000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b41146101ea578063a9059cbb1461020b578063d505accf1461021e578063dd62ed3e1461023357600080fd5b80633644e515146101a157806370a08231146101aa5780637ecebe00146101ca57600080fd5b806306fdde03146100d4578063095ea7b31461011357806318160ddd1461013657806323b872dd1461014d57806330adf81f14610160578063313ce56714610187575b600080fd5b6100fd6040518060400160405280600a8152602001692a32b9ba102a37b5b2b760b11b81525081565b60405161010a919061063f565b60405180910390f35b6101266101213660046106a9565b61025e565b604051901515815260200161010a565b61013f60005481565b60405190815260200161010a565b61012661015b3660046106d3565b610275565b61013f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61018f601281565b60405160ff909116815260200161010a565b61013f60035481565b61013f6101b836600461070f565b60016020526000908152604090205481565b61013f6101d836600461070f565b60046020526000908152604090205481565b6100fd60405180604001604052806002815260200161151560f21b81525081565b6101266102193660046106a9565b610309565b61023161022c36600461072a565b610316565b005b61013f61024136600461079d565b600260209081526000928352604080842090915290825290205481565b600061026b33848461052b565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146102f4576001600160a01b03841660009081526002602090815260408083203384529091529020546102cf908361058d565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6102ff848484610599565b5060019392505050565b600061026b338484610599565b428410156103555760405162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b60448201526064015b60405180910390fd5b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876103a8836107e6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161042192919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561048c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906104c25750886001600160a01b0316816001600160a01b0316145b6105025760405162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015260640161034c565b61050d89898961052b565b505050505050505050565b600061052482846107ff565b9392505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006105248284610812565b6001600160a01b0383166000908152600160205260409020546105bc908261058d565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546105eb9082610518565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105809085815260200190565b600060208083528351808285015260005b8181101561066c57858101830151858201604001528201610650565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106a457600080fd5b919050565b600080604083850312156106bc57600080fd5b6106c58361068d565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461068d565b92506106ff6020850161068d565b9150604084013590509250925092565b60006020828403121561072157600080fd5b6105248261068d565b600080600080600080600060e0888a03121561074557600080fd5b61074e8861068d565b965061075c6020890161068d565b95506040880135945060608801359350608088013560ff8116811461078057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156107b057600080fd5b6107b98361068d565b91506107c76020840161068d565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b6000600182016107f8576107f86107d0565b5060010190565b8082018082111561026f5761026f6107d0565b8181038181111561026f5761026f6107d056fea164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633644e5151161008c57806395d89b411161006657806395d89b41146101ea578063a9059cbb1461020b578063d505accf1461021e578063dd62ed3e1461023357600080fd5b80633644e515146101a157806370a08231146101aa5780637ecebe00146101ca57600080fd5b806306fdde03146100d4578063095ea7b31461011357806318160ddd1461013657806323b872dd1461014d57806330adf81f14610160578063313ce56714610187575b600080fd5b6100fd6040518060400160405280600a8152602001692a32b9ba102a37b5b2b760b11b81525081565b60405161010a919061063f565b60405180910390f35b6101266101213660046106a9565b61025e565b604051901515815260200161010a565b61013f60005481565b60405190815260200161010a565b61012661015b3660046106d3565b610275565b61013f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b61018f601281565b60405160ff909116815260200161010a565b61013f60035481565b61013f6101b836600461070f565b60016020526000908152604090205481565b61013f6101d836600461070f565b60046020526000908152604090205481565b6100fd60405180604001604052806002815260200161151560f21b81525081565b6101266102193660046106a9565b610309565b61023161022c36600461072a565b610316565b005b61013f61024136600461079d565b600260209081526000928352604080842090915290825290205481565b600061026b33848461052b565b5060015b92915050565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019146102f4576001600160a01b03841660009081526002602090815260408083203384529091529020546102cf908361058d565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b6102ff848484610599565b5060019392505050565b600061026b338484610599565b428410156103555760405162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b60448201526064015b60405180910390fd5b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876103a8836107e6565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161042192919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561048c573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906104c25750886001600160a01b0316816001600160a01b0316145b6105025760405162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015260640161034c565b61050d89898961052b565b505050505050505050565b600061052482846107ff565b9392505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006105248284610812565b6001600160a01b0383166000908152600160205260409020546105bc908261058d565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546105eb9082610518565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906105809085815260200190565b600060208083528351808285015260005b8181101561066c57858101830151858201604001528201610650565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146106a457600080fd5b919050565b600080604083850312156106bc57600080fd5b6106c58361068d565b946020939093013593505050565b6000806000606084860312156106e857600080fd5b6106f18461068d565b92506106ff6020850161068d565b9150604084013590509250925092565b60006020828403121561072157600080fd5b6105248261068d565b600080600080600080600060e0888a03121561074557600080fd5b61074e8861068d565b965061075c6020890161068d565b95506040880135945060608801359350608088013560ff8116811461078057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156107b057600080fd5b6107b98361068d565b91506107c76020840161068d565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b6000600182016107f8576107f86107d0565b5060010190565b8082018082111561026f5761026f6107d0565b8181038181111561026f5761026f6107d056fea164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
