ETH Price: $2,065.64 (+3.14%)

Transaction Decoder

Block:
12566660 at Jun-04-2021 07:42:36 AM +UTC
Transaction Fee:
0.017960944001122559 ETH $37.10
Gas Used:
1,122,559 Gas / 16.000000001 Gwei

Account State Difference:

  Address   Before After State Difference Code
0x00000000...b0eF1fA1c
0x031231bB...396b0baD5
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x13F60193...71a648174
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x178Da130...9D5f44822
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x1Fce01F2...22af7A8A1
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x20191b0D...44bfF475E
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x20194a25...46f7CAf22
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x37b8a839...21eac56D3
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x3b75c5c8...815460b6c
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x3c334edc...1aFA47E8D
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x3d1c11a0...517E781c6
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x43aE70d0...2964791fe
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x52675736...aEEe2FEdB
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
(Nanopool)
2,711.354307515151691304 Eth2,711.372268459152813863 Eth0.017960944001122559
0x563fFeE0...8Ffe4941F
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x58faA63b...b081691EB
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x5bF3a922...A96F6eeCE
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x63B99965...A744E7611
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x723cecfe...291407DE3
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x7637FC03...aF55873d4
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x87385A22...990C2aB7b
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0x9eBBA6Da...F30863A47
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xa55cd086...D62C3DF0D
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xAC35aD7C...A3c833b53
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xbB82f54E...752437120
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xC471097A...Af210B6E0
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xC516e233...150Bb2E88
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xc7457AA4...7B0bbc563
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xe5C99b74...2f793a599
11.996322305245259354 Eth
Nonce: 63392
11.978361361244136795 Eth
Nonce: 63393
0.017960944001122559
0xE7B46922...12E08347E
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xea37438A...7BCe0b0fD
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xF98aeF67...Ebe740afA
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287
0xfE1C421c...6Fd14F293
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 159722012652671806229941900564286316604591491724287

Execution Trace

ChiToken.mint( value=30 )
  • 0x58faa63bb0e60aa571fc18670429711b081691eb.746d4946( )
  • 0x13f6019335ff5e2e566a96cf9056c1971a648174.746d4946( )
  • 0x031231bbd22be4974707d5f8ce02ab9396b0bad5.746d4946( )
  • 0x3c334edc7ddc051a99e54da86f383c11afa47e8d.746d4946( )
  • 0xac35ad7ca4251740f62064d69446108a3c833b53.746d4946( )
  • 0x5267573689a902189d3260c7de83227aeee2fedb.746d4946( )
  • 0x37b8a839eb02bf08da1f5f7e8656f0721eac56d3.746d4946( )
  • 0xc471097abc822c97928bfecb5fad2ecaf210b6e0.746d4946( )
  • 0x9ebba6dab4d0fb8a7f85d5ebbf601c4f30863a47.746d4946( )
  • 0xc7457aa4d67f62cf7db85eeb753f6c37b0bbc563.746d4946( )
  • 0xea37438aff85ce8e5ce472348ec8ad27bce0b0fd.746d4946( )
  • 0x1fce01f26bba8e331643aa02c9c0ceb22af7a8a1.746d4946( )
  • 0xa55cd08673e8c39b23341b9c1ae0700d62c3df0d.746d4946( )
  • 0x178da13082bfee00497ae560aedc6fd9d5f44822.746d4946( )
  • 0x7637fc03a462a7d8ae7123cc643a8d9af55873d4.746d4946( )
  • 0x87385a2279cae79f46e5745e6b75c2c990c2ab7b.746d4946( )
  • 0x3b75c5c8bc2c1b580b986fe6e457115815460b6c.746d4946( )
  • 0x5bf3a9223a44e2ddb0845a6bcb48554a96f6eece.746d4946( )
  • 0xfe1c421c035a3be5244f31f5b744acf6fd14f293.746d4946( )
  • 0x63b99965393ac9bea49c21a4b9bd2e2a744e7611.746d4946( )
  • 0x43ae70d0440f8630e3c0ad7f6424b4a2964791fe.746d4946( )
  • 0xf98aef67f9c595f39b9ddad5d55dfaeebe740afa.746d4946( )
  • 0x20191b0d0432e8d2eb6affdc8ef615944bff475e.746d4946( )
  • 0x3d1c11a0511a4c1944956bc769095f6517e781c6.746d4946( )
  • 0xbb82f54eff5d2e0b127b1884b00ae11752437120.746d4946( )
  • 0xc516e233315182b82624861cc498ed7150bb2e88.746d4946( )
  • 0x723cecfe1cf9319bdd7a53c6621ec00291407de3.746d4946( )
  • 0x563ffee06ee4afa85b6fc74615988378ffe4941f.746d4946( )
  • 0x20194a25b28860eff8993116470c49446f7caf22.746d4946( )
  • 0xe7b4692220290b3274ef003540ecd8c12e08347e.746d4946( )
    /*
                                                                     ,╖╗#▒▓▓▓▓▓╣╬╣▓▓▓▓▒#╗╗╓,
                                                               ,╗@▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓╗╖
                                                           ╓#▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╝▀╠╠▄╣╝╜"""╙╙▀╝╝╣╬╬╬╬▓▌╖
                                                        ╓▓╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▀`╓å▓▓▓╙  ,▄▓▓██▓▓▓▄▄▄▄▄╠╠╙╠▄▄
                                                     ╓@╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▌  ê`'     *▀▀▀▀▀▀▀▓██████████████▄
                                                   ╔▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬                      ╙▀████████████▌
                                                 ╓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬                         ╙████████████▌
                                               ,▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▀                          ╗▄█████████████▄
                                              é╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▌   #╙                       ╙▀█████████████▓
                                             ╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▀              ╙▓╬╣▓▄            ╙▀▀███████████µ
                                            ▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▀╣╝╙             ╒▓╬╬╬╬╬╬▓         ╙████████████████µ
                                           ▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▌              ╖╖╖▄▓╬╬╬╬╬╬╬▓         █████████████████µ
                                          ╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬        ,#▓╣╬╬▓╬╬╬╬╬╬╬╬╬╬╬╬▌         ▓█████████████████
                                         ]╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╓╖     ]╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣╨          ██████████████████▌
                                         ▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▌╖,   ╙╠╠▓╬╬╬╬╬╬╬╬╬▓╝╙           ╫███████████████████
                                        ]╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╝▀╙              ▓████████████████████▌
                                        ║╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╝▀╙`                 ▄███████████████████████
                                        ╟╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓╝▀╙                     ,▄█████████████████████████
                                        ╟╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╝╜`                       ▄▓████████████████████████████
                                        ║╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╣▀`                     ,▄▄▓████████████████████████████████
                                        ▐╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓╙                       ,,,▄╠▓██████████████████████████████▌
                                         ╣╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓╙╔▒`               ╓▄▓████████████████████████████████████████⌐
                                         ╚╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓╣▓              ▄▓████████████████████████████████████████████
                                          ▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬             ▄██████████████████████████████████████████████⌐
                                           ╣╬╬╬╬╬╬╬╬╬╬╬╬╬╛           ▄███████████████████████████████████████████████▌
                                           └╣╬╬╬╬╬╬╬╬╬╬╬▓           ▄███████████████████████████████████████████████▌
                                            └▓╬╬╬╬╬╬╬╬╬╬Γ          ]███████████████████████████████████████████████▀
                                              ╣╬╬╬╬╬╬╬╬╬⌐          ╫████████████████████████████████▀▀▀▀▀▓████████╜
                                               ╙╬╬╬╬╬╬╬╬⌐          ╟███████████████████████████▀╙    ,▄▓▓▓▓▓████▓
                                                 ╫╬╬╬╬╬╬b           ████████████████████████▀`    ,Φ▀▀█████████╙
                                                   ╫╬╬╬╬▌╟           ██████████████████▀╓▀─       ▄▓█████████▀
                                                     ╚╣╬▓╣▓           └▀████████████▀`         ╓▓█████████▓╙
                                                       ╙╝╬╬▓             .▄▄▓█▀▀▀`           ▄▓█████████▀
                                                          ╙▀▓▄                            ƒ,▓███████▀▀
                                                              "                        ╓▓█▓█████▀▀└
                                                                                   ╓▄▓████▀▀╙└
    
     ██████╗██╗  ██╗██╗     ██████╗  █████╗ ███████╗████████╗ ██████╗ ██╗  ██╗███████╗███╗   ██╗    ██████╗ ██╗   ██╗     ██╗██╗███╗   ██╗ ██████╗██╗  ██╗
    ██╔════╝██║  ██║██║    ██╔════╝ ██╔══██╗██╔════╝╚══██╔══╝██╔═══██╗██║ ██╔╝██╔════╝████╗  ██║    ██╔══██╗╚██╗ ██╔╝    ███║██║████╗  ██║██╔════╝██║  ██║
    ██║     ███████║██║    ██║  ███╗███████║███████╗   ██║   ██║   ██║█████╔╝ █████╗  ██╔██╗ ██║    ██████╔╝ ╚████╔╝     ╚██║██║██╔██╗ ██║██║     ███████║
    ██║     ██╔══██║██║    ██║   ██║██╔══██║╚════██║   ██║   ██║   ██║██╔═██╗ ██╔══╝  ██║╚██╗██║    ██╔══██╗  ╚██╔╝       ██║██║██║╚██╗██║██║     ██╔══██║
    ╚██████╗██║  ██║██║    ╚██████╔╝██║  ██║███████║   ██║   ╚██████╔╝██║  ██╗███████╗██║ ╚████║    ██████╔╝   ██║        ██║██║██║ ╚████║╚██████╗██║  ██║
     ╚═════╝╚═╝  ╚═╝╚═╝     ╚═════╝ ╚═╝  ╚═╝╚══════╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═══╝    ╚═════╝    ╚═╝        ╚═╝╚═╝╚═╝  ╚═══╝ ╚═════╝╚═╝  ╚═╝
    
                                                                 Copyright by 1inch Corporation
                                                                     https://1inch.exchange
    
    ---
    Deployer wallet address:
    0x7E1E3334130355799F833ffec2D731BCa3E68aF6
    
    Signed raw transaction for chainId 1:
    0xf90d7f808506fc23ac00830bd0fa8080b90d2c608060405234801561001057600080fd5b50610d0c806100206000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a9059cbb11610071578063a9059cbb14610305578063b0ac19a014610331578063d89135cd1461036a578063d8ccd0f314610372578063dd62ed3e1461038f5761010b565b806370a08231146102b057806395d89b41146102d6578063a0712d68146102de578063a2309ff8146102fd5761010b565b806323b872dd116100de57806323b872dd14610213578063313ce567146102495780635f2e2b45146102675780636366b936146102935761010b565b806306fdde0314610110578063079d229f1461018d578063095ea7b3146101cb57806318160ddd1461020b575b600080fd5b6101186103bd565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b0381351690602001356103ee565b60408051918252519081900360200190f35b6101f7600480360360408110156101e157600080fd5b506001600160a01b03813516906020013561041f565b604080519115158252519081900360200190f35b6101b9610435565b6101f76004803603606081101561022957600080fd5b506001600160a01b03813581169160208101359091169060400135610453565b6102516104c2565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561027d57600080fd5b506001600160a01b0381351690602001356104c7565b6101b9600480360360208110156102a957600080fd5b50356104e2565b6101b9600480360360208110156102c657600080fd5b50356001600160a01b03166104ff565b61011861051a565b6102fb600480360360208110156102f457600080fd5b5035610539565b005b6101b961070d565b6101f76004803603604081101561031b57600080fd5b506001600160a01b038135169060200135610713565b61034e6004803603602081101561034757600080fd5b5035610720565b604080516001600160a01b039092168252519081900360200190f35b6101b961078b565b6101b96004803603602081101561038857600080fd5b5035610791565b6101b9600480360360408110156103a557600080fd5b506001600160a01b03813581169160200135166107aa565b60405180604001604052806015815260200174086d0d2408ec2e6e8ded6cadc40c4f24062d2dcc6d605b1b81525081565b60006104188361041361040985610404886104ff565b6107d5565b61040487336107aa565b6104c7565b9392505050565b600061042c3384846107eb565b50600192915050565b600061044e60035460025461084d90919063ffffffff16565b905090565b600061046084848461088f565b6104b884336104b385604051806060016040528060288152602001610c8b602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919063ffffffff61096116565b6107eb565b5060019392505050565b600081565b60006104d383836109f8565b6104dc82610a59565b50919050565b60006104f96104f483610404336104ff565b610791565b92915050565b6001600160a01b031660009081526020819052604090205490565b6040518060400160405280600381526020016243484960e81b81525081565b6002547f746d4946c0e9f43f4dee607b0ef1fa1c3318585733ff6000526015600bf30000600052602082045b80156106d85781601e600080f55060018201601e600080f55060028201601e600080f55060038201601e600080f55060048201601e600080f55060058201601e600080f55060068201601e600080f55060078201601e600080f55060088201601e600080f55060098201601e600080f550600a8201601e600080f550600b8201601e600080f550600c8201601e600080f550600d8201601e600080f550600e8201601e600080f550600f8201601e600080f55060108201601e600080f55060118201601e600080f55060128201601e600080f55060138201601e600080f55060148201601e600080f55060158201601e600080f55060168201601e600080f55060178201601e600080f55060188201601e600080f55060198201601e600080f550601a8201601e600080f550601b8201601e600080f550601c8201601e600080f550601d8201601e600080f550601e8201601e600080f550601f8201601e600080f5506020919091019060001901610565565b50601f82165b80156106fc5781601e600080f55060019190910190600019016106de565b506107073383610ad1565b60025550565b60025481565b600061042c33848461088f565b604080516001600160f81b03196020808301919091523060601b602183015260358201939093527f3c1644c68e5d6cb380c36d1bf847fdbc0c7ac28030025a2fc5e63cce23c16348605580830191909152825180830390910181526075909101909152805191012090565b60035481565b600061079d3383610b50565b6107a682610a59565b5090565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60008183106107e45781610418565b5090919050565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600061041883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610961565b6108d281604051806060016040528060268152602001610c65602691396001600160a01b038616600090815260208190526040902054919063ffffffff61096116565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610907908263ffffffff610be816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156109f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109b557818101518382015260200161099d565b50505050905090810190601f1680156109e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b610a028282610b50565b610a5582336104b384604051806060016040528060248152602001610cb3602491396001600160a01b0388166000908152600160209081526040808320338452909152902054919063ffffffff61096116565b5050565b60035460005b82811015610aca57610a72818301610720565b6040516001600160a01b039190911690600081818181865af19150503d8060008114610aba576040519150601f19603f3d011682016040523d82523d6000602084013e610abf565b606091505b505050600101610a5f565b5001600355565b6001600160a01b038216600090815260208190526040902054610afa908263ffffffff610be816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b610b9381604051806060016040528060228152602001610c43602291396001600160a01b038516600090815260208190526040902054919063ffffffff61096116565b6001600160a01b038316600081815260208181526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600082820183811015610418576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220687f814fb4c0b3c6abd66ebdb1f1eabcf69becf92a382c3af453e0b21c3d15b564736f6c6343000608003325a00ed87a047b4e415bd7f8cf7a7ce5a1c204125df1cedc35c7bdcb71bd2a29a35ea02db2490337fa6c425f1b3d74b7b217de8b394adb3f571827629c06dc16364b66
    ---
    */
    // File: @openzeppelin/contracts/math/Math.sol
    
    pragma solidity ^0.6.0;
    
    /**
     * @dev Standard math utilities missing in the Solidity language.
     */
    library Math {
        /**
         * @dev Returns the largest of two numbers.
         */
        function max(uint256 a, uint256 b) internal pure returns (uint256) {
            return a >= b ? a : b;
        }
    
        /**
         * @dev Returns the smallest of two numbers.
         */
        function min(uint256 a, uint256 b) internal pure returns (uint256) {
            return a < b ? a : b;
        }
    
        /**
         * @dev Returns the average of two numbers. The result is rounded towards
         * zero.
         */
        function average(uint256 a, uint256 b) internal pure returns (uint256) {
            // (a + b) / 2 can overflow, so we distribute
            return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
        }
    }
    
    // File: @openzeppelin/contracts/math/SafeMath.sol
    
    pragma solidity ^0.6.0;
    
    /**
     * @dev Wrappers over Solidity's arithmetic operations with added overflow
     * checks.
     *
     * Arithmetic operations in Solidity wrap on overflow. This can easily result
     * in bugs, because programmers usually assume that an overflow raises an
     * error, which is the standard behavior in high level programming languages.
     * `SafeMath` restores this intuition by reverting the transaction when an
     * operation overflows.
     *
     * Using this library instead of the unchecked operations eliminates an entire
     * class of bugs, so it's recommended to use it always.
     */
    library SafeMath {
        /**
         * @dev Returns the addition of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `+` operator.
         *
         * Requirements:
         * - Addition cannot overflow.
         */
        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            uint256 c = a + b;
            require(c >= a, "SafeMath: addition overflow");
    
            return c;
        }
    
        /**
         * @dev Returns the subtraction of two unsigned integers, reverting on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         * - Subtraction cannot overflow.
         */
        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return sub(a, b, "SafeMath: subtraction overflow");
        }
    
        /**
         * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
         * overflow (when the result is negative).
         *
         * Counterpart to Solidity's `-` operator.
         *
         * Requirements:
         * - Subtraction cannot overflow.
         */
        function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b <= a, errorMessage);
            uint256 c = a - b;
    
            return c;
        }
    
        /**
         * @dev Returns the multiplication of two unsigned integers, reverting on
         * overflow.
         *
         * Counterpart to Solidity's `*` operator.
         *
         * Requirements:
         * - Multiplication cannot overflow.
         */
        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) {
                return 0;
            }
    
            uint256 c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");
    
            return c;
        }
    
        /**
         * @dev Returns the integer division of two unsigned integers. Reverts on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return div(a, b, "SafeMath: division by zero");
        }
    
        /**
         * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
         * division by zero. The result is rounded towards zero.
         *
         * Counterpart to Solidity's `/` operator. Note: this function uses a
         * `revert` opcode (which leaves remaining gas untouched) while Solidity
         * uses an invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            // Solidity only automatically asserts when dividing by 0
            require(b > 0, errorMessage);
            uint256 c = a / b;
            // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    
            return c;
        }
    
        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return mod(a, b, "SafeMath: modulo by zero");
        }
    
        /**
         * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
         * Reverts with custom message when dividing by zero.
         *
         * Counterpart to Solidity's `%` operator. This function uses a `revert`
         * opcode (which leaves remaining gas untouched) while Solidity uses an
         * invalid opcode to revert (consuming all remaining gas).
         *
         * Requirements:
         * - The divisor cannot be zero.
         */
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b != 0, errorMessage);
            return a % b;
        }
    }
    
    // File: @openzeppelin/contracts/token/ERC20/IERC20.sol
    
    pragma solidity ^0.6.0;
    
    /**
     * @dev Interface of the ERC20 standard as defined in the EIP.
     */
    interface IERC20 {
        /**
         * @dev Returns the amount of tokens in existence.
         */
        function totalSupply() external view returns (uint256);
    
        /**
         * @dev Returns the amount of tokens owned by `account`.
         */
        function balanceOf(address account) external view returns (uint256);
    
        /**
         * @dev Moves `amount` tokens from the caller's account to `recipient`.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transfer(address recipient, uint256 amount) external returns (bool);
    
        /**
         * @dev Returns the remaining number of tokens that `spender` will be
         * allowed to spend on behalf of `owner` through {transferFrom}. This is
         * zero by default.
         *
         * This value changes when {approve} or {transferFrom} are called.
         */
        function allowance(address owner, address spender) external view returns (uint256);
    
        /**
         * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * IMPORTANT: Beware that changing an allowance with this method brings the risk
         * that someone may use both the old and the new allowance by unfortunate
         * transaction ordering. One possible solution to mitigate this race
         * condition is to first reduce the spender's allowance to 0 and set the
         * desired value afterwards:
         * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
         *
         * Emits an {Approval} event.
         */
        function approve(address spender, uint256 amount) external returns (bool);
    
        /**
         * @dev Moves `amount` tokens from `sender` to `recipient` using the
         * allowance mechanism. `amount` is then deducted from the caller's
         * allowance.
         *
         * Returns a boolean value indicating whether the operation succeeded.
         *
         * Emits a {Transfer} event.
         */
        function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
        /**
         * @dev Emitted when `value` tokens are moved from one account (`from`) to
         * another (`to`).
         *
         * Note that `value` may be zero.
         */
        event Transfer(address indexed from, address indexed to, uint256 value);
    
        /**
         * @dev Emitted when the allowance of a `spender` for an `owner` is set by
         * a call to {approve}. `value` is the new allowance.
         */
        event Approval(address indexed owner, address indexed spender, uint256 value);
    }
    
    // File: contracts/ChiToken.sol
    
    pragma solidity ^0.6.0;
    
    
    
    
    
    abstract contract ERC20WithoutTotalSupply is IERC20 {
        using SafeMath for uint256;
    
        mapping(address => uint256) private _balances;
        mapping(address => mapping(address => uint256)) private _allowances;
    
        function balanceOf(address account) public view override returns (uint256) {
            return _balances[account];
        }
    
        function allowance(address owner, address spender) public view override returns (uint256) {
            return _allowances[owner][spender];
        }
    
        function transfer(address recipient, uint256 amount) public override returns (bool) {
            _transfer(msg.sender, recipient, amount);
            return true;
        }
    
        function approve(address spender, uint256 amount) public override returns (bool) {
            _approve(msg.sender, spender, amount);
            return true;
        }
    
        function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }
    
        function _transfer(address sender, address recipient, uint256 amount) internal {
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
    
        function _approve(address owner, address spender, uint256 amount) internal {
            _allowances[owner][spender] = amount;
            emit Approval(owner, spender, amount);
        }
    
        function _mint(address account, uint256 amount) internal {
            _balances[account] = _balances[account].add(amount);
            emit Transfer(address(0), account, amount);
        }
    
        function _burn(address account, uint256 amount) internal {
            _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
            emit Transfer(account, address(0), amount);
        }
    
        function _burnFrom(address account, uint256 amount) internal {
            _burn(account, amount);
            _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance"));
        }
    }
    
    
    contract ChiToken is IERC20, ERC20WithoutTotalSupply {
        string constant public name = "Chi Gastoken by 1inch";
        string constant public symbol = "CHI";
        uint8 constant public decimals = 0;
    
        uint256 public totalMinted;
        uint256 public totalBurned;
    
        function totalSupply() public view override returns(uint256) {
            return totalMinted.sub(totalBurned);
        }
    
        function mint(uint256 value) public {
            uint256 offset = totalMinted;
            assembly {
                mstore(0, 0x746d4946c0e9F43F4Dee607b0eF1fA1c3318585733ff6000526015600bf30000)
    
                for {let i := div(value, 32)} i {i := sub(i, 1)} {
                    pop(create2(0, 0, 30, add(offset, 0))) pop(create2(0, 0, 30, add(offset, 1)))
                    pop(create2(0, 0, 30, add(offset, 2))) pop(create2(0, 0, 30, add(offset, 3)))
                    pop(create2(0, 0, 30, add(offset, 4))) pop(create2(0, 0, 30, add(offset, 5)))
                    pop(create2(0, 0, 30, add(offset, 6))) pop(create2(0, 0, 30, add(offset, 7)))
                    pop(create2(0, 0, 30, add(offset, 8))) pop(create2(0, 0, 30, add(offset, 9)))
                    pop(create2(0, 0, 30, add(offset, 10))) pop(create2(0, 0, 30, add(offset, 11)))
                    pop(create2(0, 0, 30, add(offset, 12))) pop(create2(0, 0, 30, add(offset, 13)))
                    pop(create2(0, 0, 30, add(offset, 14))) pop(create2(0, 0, 30, add(offset, 15)))
                    pop(create2(0, 0, 30, add(offset, 16))) pop(create2(0, 0, 30, add(offset, 17)))
                    pop(create2(0, 0, 30, add(offset, 18))) pop(create2(0, 0, 30, add(offset, 19)))
                    pop(create2(0, 0, 30, add(offset, 20))) pop(create2(0, 0, 30, add(offset, 21)))
                    pop(create2(0, 0, 30, add(offset, 22))) pop(create2(0, 0, 30, add(offset, 23)))
                    pop(create2(0, 0, 30, add(offset, 24))) pop(create2(0, 0, 30, add(offset, 25)))
                    pop(create2(0, 0, 30, add(offset, 26))) pop(create2(0, 0, 30, add(offset, 27)))
                    pop(create2(0, 0, 30, add(offset, 28))) pop(create2(0, 0, 30, add(offset, 29)))
                    pop(create2(0, 0, 30, add(offset, 30))) pop(create2(0, 0, 30, add(offset, 31)))
                    offset := add(offset, 32)
                }
    
                for {let i := and(value, 0x1F)} i {i := sub(i, 1)} {
                    pop(create2(0, 0, 30, offset))
                    offset := add(offset, 1)
                }
            }
    
            _mint(msg.sender, value);
            totalMinted = offset;
        }
    
        function computeAddress2(uint256 salt) public view returns (address) {
            bytes32 _data = keccak256(
                abi.encodePacked(bytes1(0xff), address(this), salt, bytes32(0x3c1644c68e5d6cb380c36d1bf847fdbc0c7ac28030025a2fc5e63cce23c16348))
            );
            return address(uint256(_data));
        }
    
        function _destroyChildren(uint256 value) internal {
            uint256 _totalBurned = totalBurned;
            for (uint256 i = 0; i < value; i++) {
                computeAddress2(_totalBurned + i).call("");
            }
            totalBurned = _totalBurned + value;
        }
    
        function free(uint256 value) public returns (uint256)  {
            _burn(msg.sender, value);
            _destroyChildren(value);
            return value;
        }
    
        function freeUpTo(uint256 value) public returns (uint256) {
            return free(Math.min(value, balanceOf(msg.sender)));
        }
    
        function freeFrom(address from, uint256 value) public returns (uint256) {
            _burnFrom(from, value);
            _destroyChildren(value);
            return value;
        }
    
        function freeFromUpTo(address from, uint256 value) public returns (uint256) {
            return freeFrom(from, Math.min(Math.min(value, balanceOf(from)), allowance(from, msg.sender)));
        }
    }