Giter Site home page Giter Site logo

fantom-fmint's Introduction

Fantom FMint DeFi module

The repository implements fMint module of the Fantom DeFi smart contracts in Solidity based on Andre Cronje's implementation.

Please note we use OpenZeppelin library version 2.5 along with the Solidity 0.5 and truffle to conform with the EVM implemented in the Opera block chain. Consult the Truffle documents to find out how to build and deploy the smart contract implemented here.

In general, all you should need to do is to call truffle build to get the deployable contract code and ABI inside build/ folder.

Deployment Requirements

The Fantom fMint contract has following dependencies:

  • Wrapped FTM ERC20 contract wFTM.
  • At least one ERC20 token contract with minting and burning capability, see IERC20Detailed. We use OpenZeppelin implementation internally.
  • Band Protocol price oracle proxy, compatible with our proxy interface, or Fantom Price Oracle Proxy Fantom Oracle PriceFeed.
  • You need ChainLink compatible price oracle aggregate for each ERC20 token, if the deployment uses Fantom Price Oracle proxy. See AggregatorInterface.
  • Fantom DeFi Token Storage contract, available in this repository.
  • Fantom DeFi Token Registry contract, available in this repository.
  • Fantom fMint Address Provider contract, available in this repository.
  • Fantom fMint Reward Distribution contract, available in this repository.

Price oracle aggregates must receive price feeds from trusted external sources. Tokens will be rejected without a price tag even if they are registered in the token registry to be used with the fMint. The Fantom own deployment uses Band Protocol price oracle proxy to offer accurate and precise price value calculations.

Deployment using Lachesis JavaScript Console

We assume you have the deployment account unlocked using personal.unlockAccount() call, and you have the account address stored in account variable.

var account = "0x11111111111111111111111111111111";
personal.unlockAccount(account, "very-secret-password", 300);
web3.ftm.defaultAccount = account;

Deployment Steps

  1. Deploy wFTM and ERC20 tokens you will be using with the fMint.

  2. Obtain address of a price oracle proxy of your choice. Continue with the step 5, if you are going to use an external proxy. Alternatively, deploy ChainLink compatible Price Oracle Aggregates and continue with the next step.

  3. Deploy Fantom Price Oracle Proxy contract.

    /**
     * This deploys Fantom Price Oracle Proxy contract.
     */
    var priceProxyAbi = JSON.parse('[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"aggregator","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AggregatorChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"aggregators","outputs":[{"internalType":"contract AggregatorInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"aggregator","type":"address"}],"name":"setAggregator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_back","type":"uint256"}],"name":"getPreviousPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"_back","type":"uint256"}],"name":"getPreviousTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]');
    var priceProxyByteCode = "0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610a6f806100326000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b14610160578063e0a3581e14610168578063e889e5d6146101a1578063eb470ebf146101da5761007d565b8063112cdab91461008257806341976e09146100de5780637394a7f614610123575b600080fd5b6100b56004803603602081101561009857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661020d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610111600480360360208110156100f457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610235565b60408051918252519081900360200190f35b61015e6004803603604081101561013957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610373565b005b6100b561048c565b6101116004803603604081101561017e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104a8565b610111600480360360408110156101b757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610705565b610111600480360360208110156101f057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661092e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600160205260408120549091166102ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f7261636c65206e6f7420617661696c61626c65000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040918290205482517f50d25bcd00000000000000000000000000000000000000000000000000000000815292519316926350d25bcd926004808201939291829003018186803b15801561034157600080fd5b505afa158015610355573d6000803e3d6000fd5b505050506040513d602081101561036b57600080fd5b505192915050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6163636573732072657374726963746564000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff82811660008181526001602090815260409182902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016948616948517905581519384524290840152805191927f51012bc010926f3f948f99b90ed487a209375a900797c69e70dbc17f09264357929081900390910190a25050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604081205490911661053d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f7261636c65206e6f7420617661696c61626c65000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602090815260408083205481517f668a0f0200000000000000000000000000000000000000000000000000000000815291519394169263668a0f0292600480840193919291829003018186803b1580156105b557600080fd5b505afa1580156105c9573d6000803e3d6000fd5b505050506040513d60208110156105df57600080fd5b505190508083111561065257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f7420656e6f75676820686973746f72790000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040918290205482517fb633620c0000000000000000000000000000000000000000000000000000000081528786036004820152925193169263b633620c926024808201939291829003018186803b1580156106d157600080fd5b505afa1580156106e5573d6000803e3d6000fd5b505050506040513d60208110156106fb57600080fd5b5051949350505050565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526001602052604081205490911661079a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f7261636c65206e6f7420617661696c61626c65000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001602090815260408083205481517f668a0f0200000000000000000000000000000000000000000000000000000000815291519394169263668a0f0292600480840193919291829003018186803b15801561081257600080fd5b505afa158015610826573d6000803e3d6000fd5b505050506040513d602081101561083c57600080fd5b50519050808311156108af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f7420656e6f75676820686973746f72790000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040918290205482517fb5ab58dc0000000000000000000000000000000000000000000000000000000081528786036004820152925193169263b5ab58dc926024808201939291829003018186803b1580156106d157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8181166000908152600160205260408120549091166109c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6f7261636c65206e6f7420617661696c61626c65000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040918290205482517f8205bf6a0000000000000000000000000000000000000000000000000000000081529251931692638205bf6a926004808201939291829003018186803b15801561034157600080fdfea265627a7a7231582020c96c6178829d5ee97ee37c16a1ea29e4a79c770479522721dc4c11f52c349464736f6c63430005110032";
     
    // create new contract
    contract = web3.ftm.contract(priceProxyAbi);
    deploy = contract.new({
        data: priceProxyByteCode,
        from: account,
        gas: 4000000
    });
     
    // get the contract address (you may need to wait for the receipt to be available)
    priceProxyAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;    
  4. Assign Price Oracle Aggregates to your ERC20 tokens on the Price Proxy.

    // instantiate the oracle proxy deployed above
    var priceProxy = web3.ftm.contract(priceProxyAbi).at(priceProxyAddress);
    
    // what tokens do we use
    var tokenWFTM = "0xf1277d1ed8ad466beddf92ef448a132661956621";
    var tokenUSD = "0x91ea991bd52ee3c40eda2509701d905e1ee54074";
    
    // what price oracle aggregates we use
    var oracleFTM = "0xb1c29bf02fe3bad77dc25c70ad7f680936fc84ef";
    var oracleUSD = "0x8019db8a3ff1887d047f2dc1c7265ea8dab1ca80";
    
    // assign the oracles to tokens
    priceProxy.setAggregator(tokenWFTM, oracleFTM);
    priceProxy.setAggregator(tokenUSD, oracleUSD);
  5. Deploy Token Registry from this repository.

    /**
    * This deploys Fantom DeFi Tokens Registry
    */
    var registryAbi = JSON.parse('[{"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":"token","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"TokenUpdated","type":"event"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"string","name":"logo","type":"string"},{"internalType":"address","name":"oracle","type":"address"},{"internalType":"uint8","name":"priceDecimals","type":"uint8"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"bool","name":"canDeposit","type":"bool"},{"internalType":"bool","name":"canMint","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensList","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"priceDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_logo","type":"string"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint8","name":"_priceDecimals","type":"uint8"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"bool","name":"_canDeposit","type":"bool"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"string","name":"_logo","type":"string"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"uint8","name":"_priceDecimals","type":"uint8"},{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"bool","name":"_canDeposit","type":"bool"},{"internalType":"bool","name":"_canMint","type":"bool"}],"name":"updateToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]');
    var registryByteCode = "0x608060405260006100176001600160e01b0361006616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006a565b3390565b611b08806100796000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80639f8a13d71161008c578063cefe0f2111610066578063cefe0f21146102cf578063d75c1c4c14610318578063e4860339146103dc578063f2fde38b146105ae576100df565b80639f8a13d71461024f578063a64ed8ba14610282578063c2ba47441461029c576100df565b8063715018a6116100bd578063715018a6146102375780638da5cb5b1461023f5780638f32d59b14610247576100df565b80634bf0d331146100e45780634d12e34e1461012b5780636a77a21414610171575b600080fd5b610117600480360360208110156100fa57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166105e1565b604080519115158252519081900360200190f35b6101486004803603602081101561014157600080fd5b5035610629565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610235600480360360e081101561018757600080fd5b73ffffffffffffffffffffffffffffffffffffffff82351691908101906040810160208201356401000000008111156101bf57600080fd5b8201836020820111156101d157600080fd5b803590602001918460018302840111640100000000831117156101f357600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060ff602082013516906040810135151590606081013515159060800135151561065d565b005b610235610efa565b610148610fdc565b610117610ff9565b6101176004803603602081101561026557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611037565b61028a61107e565b60408051918252519081900360200190f35b610117600480360360208110156102b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611084565b610302600480360360208110156102e557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110cd565b6040805160ff9092168252519081900360200190f35b610235600480360360e081101561032e57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561036657600080fd5b82018360208201111561037857600080fd5b8035906020019184600183028401116401000000008311171561039a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060ff6020820135169060408101351515906060810135151590608001351515611113565b61040f600480360360208110156103f257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611550565b604080518b815260ff808a16606083015273ffffffffffffffffffffffffffffffffffffffff881660a0830152861660c082015284151560e082015283151561010082015282151561012082015261014060208083018281528d51928401929092528c5192939192918401916080850191610160860191908f019080838360005b838110156104a8578181015183820152602001610490565b50505050905090810190601f1680156104d55780820380516001836020036101000a031916815260200191505b5084810383528c5181528c516020918201918e019080838360005b838110156105085781810151838201526020016104f0565b50505050905090810190601f1680156105355780820380516001836020036101000a031916815260200191505b5084810382528a5181528a516020918201918c019080838360005b83811015610568578181015183820152602001610550565b50505050905090810190601f1680156105955780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b610235600480360360208110156105c457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661180d565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902060050154760100000000000000000000000000000000000000000000900460ff1690565b6002818154811061063657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610665610ff9565b6106d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff88166000908152600160205260409020541561076257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f746f6b656e20616c7265616479206b6e6f776e00000000000000000000000000604482015290519081900360640190fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107aa57600080fd5b505afa1580156107be573d6000803e3d6000fd5b505050506040513d60208110156107d457600080fd5b5051905060ff811661084757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f746f6b656e20646563696d616c7320696e76616c696400000000000000000000604482015290519081900360640190fd5b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16908117909155604080517f06fdde0300000000000000000000000000000000000000000000000000000000815290516060936306fdde039260048082019391829003018186803b15801561090657600080fd5b505afa15801561091a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052602081101561096157600080fd5b810190808051604051939291908464010000000082111561098157600080fd5b90830190602082018581111561099657600080fd5b82516401000000008111828201881017156109b057600080fd5b82525081516020918201929091019080838360005b838110156109dd5781810151838201526020016109c5565b50505050905090810190601f168015610a0a5780820380516001836020036101000a031916815260200191505b50604052505050905060405180610140016040528060028054905081526020018281526020018b73ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610a7657600080fd5b505afa158015610a8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015610ad157600080fd5b8101908080516040519392919084640100000000821115610af157600080fd5b908301906020820185811115610b0657600080fd5b8251640100000000811182820188101715610b2057600080fd5b82525081516020918201929091019080838360005b83811015610b4d578181015183820152602001610b35565b50505050905090810190601f168015610b7a5780820380516001836020036101000a031916815260200191505b5060405250505081526020018360ff1681526020018a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505073ffffffffffffffffffffffffffffffffffffffff808b1660208085019190915260ff8b166040808601919091528a15156060860152891515608086015288151560a090950194909452908e168252600180825292909120835181558382015180519193610c3b9390850192910190611989565b5060408201518051610c57916002840191602090910190611989565b5060608201516003820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560808201518051610cab916004840191602090910190611989565b5060a08201516005909101805460c084015160e085015161010086015161012090960151151577010000000000000000000000000000000000000000000000027fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff961515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9215157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff60ff90951674010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff998a167fffffffffffffffffffffffff0000000000000000000000000000000000000000909816979097179690961695909517939093169390931716179390931692909217909155600254604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920160208084018290528284528551928401929092528451938e16937f4af7419360b60cfcf01ac8a5c1487814e666a0af47877d73e82476772ac9150f9386939091829160608301919086019080838360005b83811015610eb3578181015183820152602001610e9b565b50505050905090810190601f168015610ee05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a250505050505050505050565b610f02610ff9565b610f6d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60005473ffffffffffffffffffffffffffffffffffffffff165b90565b6000805473ffffffffffffffffffffffffffffffffffffffff1661101b61188c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b73ffffffffffffffffffffffffffffffffffffffff166000908152600160205260409020600501547501000000000000000000000000000000000000000000900460ff1690565b60025490565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090206005015477010000000000000000000000000000000000000000000000900460ff1690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b61111b610ff9565b61118657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff881660009081526001602052604090205461121757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f746f6b656e20756e6b6e6f776e00000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8816600090815260016020526040902061124a906004018888611a07565b5084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160146101000a81548160ff021916908360ff16021790555082600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160156101000a81548160ff02191690831515021790555081600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160166101000a81548160ff02191690831515021790555080600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050160176101000a81548160ff0219169083151502179055508773ffffffffffffffffffffffffffffffffffffffff167f7dfa4f44638df9ca9c035c37f4954edb0383135db7751b81208a86345775a159600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160405180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156115385780601f1061150d57610100808354040283529160200191611538565b820191906000526020600020905b81548152906001019060200180831161151b57829003601f168201915b50509250505060405180910390a25050505050505050565b600160208181526000928352604092839020805481840180548651600296821615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911695909504601f8101859004850286018501909652858552909491939290919083018282801561160a5780601f106115df5761010080835404028352916020019161160a565b820191906000526020600020905b8154815290600101906020018083116115ed57829003601f168201915b50505060028085018054604080516020601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018716150201909416959095049283018590048502810185019091528181529596959450909250908301828280156116ba5780601f1061168f576101008083540402835291602001916116ba565b820191906000526020600020905b81548152906001019060200180831161169d57829003601f168201915b50505050600383015460048401805460408051602060026101006001861615027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f8101849004840282018401909252818152959660ff90941695939450908301828280156117735780601f1061174857610100808354040283529160200191611773565b820191906000526020600020905b81548152906001019060200180831161175657829003601f168201915b5050506005909301549192505073ffffffffffffffffffffffffffffffffffffffff81169060ff740100000000000000000000000000000000000000008204811691750100000000000000000000000000000000000000000081048216917601000000000000000000000000000000000000000000008204811691770100000000000000000000000000000000000000000000009004168a565b611815610ff9565b61188057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61188981611890565b50565b3390565b73ffffffffffffffffffffffffffffffffffffffff81166118fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611aae6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119ca57805160ff19168380011785556119f7565b828001600101855582156119f7579182015b828111156119f75782518255916020019190600101906119dc565b50611a03929150611a93565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611a66578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556119f7565b828001600101855582156119f7579182015b828111156119f7578235825591602001919060010190611a78565b610ff691905b80821115611a035760008155600101611a9956fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a7231582056e4488ec0ba77a9165b04a8283edc7c0693a73d4766539502f11589485941cc64736f6c63430005110032";
    
    // create new contract
    contract = web3.ftm.contract(registryAbi);
    deploy = contract.new({
    data: registryByteCode,
    from: account,
    gas: 4000000
    });
    
    // get the contract address (you may need to wait for the receipt to be available)
    registryAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;
  6. Add your ERC20 tokens to the Token Registry.

    Please note we add two tokens with 18 digits price oracle precision. This can vary between different price oracles and deployments. The wFTM token cannot be minted inside the minter.

    // instantiate the token registry
    var tokenRegistry = web3.ftm.contract(registryAbi).at(registryAddress);
    
    // add tokens to the registry
    tokenRegistry.addToken(
            tokenWFTM,
            'https://cryptologos.cc/logos/fantom-ftm-logo.svg?v=003',
            oracleFTM,
            18,
            true,
            true,
            false);
       
    tokenRegistry.addToken(
            tokenUSD,
            'https://cdn.worldvectorlogo.com/logos/usd-1.svg',
            oracleUSD,
            18,
            true,
            true,
            true);
  7. Deploy Address Provider from this repository.

    /**
     * This deploys Fantom DeFi fMint Address Provider
     */
    var adrProviderAbi = JSON.parse('[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"CollateralPoolChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"DebtPoolChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"FeeTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"MinterChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"PriceOracleChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"RewardDistributionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"RewardTokenChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"TokenRegistryChanged","type":"event"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPriceOracleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setPriceOracleProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokenRegistry","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setTokenRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFeeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRewardDistribution","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRewardDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRewardToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFantomMint","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFantomMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCollateralPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setCollateralPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getDebtPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setDebtPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]');
    var adrProviderByteCode = "0x608060405260006100176001600160e01b0361006616565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006a565b3390565b61102e806100796000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806369940d79116100d85780638da5cb5b1161008c578063cc653b9a11610066578063cc653b9a14610362578063f2fde38b14610395578063fcc3c074146103c857610177565b80638da5cb5b146103365780638f32d59b1461033e578063ca709a251461035a57610177565b806373c9641d116100bd57806373c9641d146102f357806384d9319e146102fb5780638aee81271461030357610177565b806369940d79146102e3578063715018a6146102eb57610177565b80631ba288781161012f57806335a5af921161011457806335a5af921461027557806342ae8684146102a857806344969711146102db57610177565b80631ba288781461022557806321f8a7211461025857610177565b8063057838bd11610160578063057838bd146101b55780630d68b761146101bd57806315cce224146101f257610177565b806303ec357f1461017c578063045bb7f8146101ad575b600080fd5b6101846103fb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61018461042b565b610184610456565b6101f0600480360360208110156101d357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610481565b005b6101f06004803603602081101561020857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661056a565b6101f06004803603602081101561023b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610653565b6101846004803603602081101561026e57600080fd5b503561073c565b6101f06004803603602081101561028b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610764565b6101f0600480360360208110156102be57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661084d565b610184610936565b610184610961565b6101f061098c565b610184610a6e565b610184610a99565b6101f06004803603602081101561031957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ac4565b610184610bad565b610346610bc9565b604080519115158252519081900360200190f35b610184610c07565b6101f06004803603602081101561037857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c32565b6101f0600480360360208110156103ab57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d1b565b6101f0600480360360208110156103de57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d9a565b60006104267f646562745f706f6f6c000000000000000000000000000000000000000000000061073c565b905090565b60006104267f70726963655f6f7261636c655f70726f7879000000000000000000000000000061073c565b60006104267f746f6b656e5f726567697374727900000000000000000000000000000000000061073c565b610489610bc9565b6104f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61051e7f7265776172645f646973747269627574696f6e0000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517ffe09426f22c44354b62f360c333309adadd6392ae248adc902f3006c7c4b92059181900360200190a150565b610572610bc9565b6105dd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106077f65726332305f6665655f746f6b656e000000000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fcb8c2156aad54c05780be84f46fd46c30c34524ac9501a0824d09f51a48c45309181900360200190a150565b61065b610bc9565b6106c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106f07f636f6c6c61746572616c5f706f6f6c000000000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f9ee268d502b2200c71bbd3cba8222b4f501a7b505c684bd40423fd446bb29fad9181900360200190a150565b60009081526001602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b61076c610bc9565b6107d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108017f746f6b656e5f726567697374727900000000000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fb6f925ec7d36d613e5d1aa87c0de3ee16a0167e6bdfa2ea254e5fee9870a941e9181900360200190a150565b610855610bc9565b6108c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108ea7f646562745f706f6f6c000000000000000000000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517ff10b554a663200a2ae53269b5aeb591082984e03e47f76ec558f283c01b116d49181900360200190a150565b60006104267f66616e746f6d5f6d696e7400000000000000000000000000000000000000000061073c565b60006104267f65726332305f7265776172645f746f6b656e000000000000000000000000000061073c565b610994610bc9565b6109ff57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60006104267f636f6c6c61746572616c5f706f6f6c000000000000000000000000000000000061073c565b60006104267f7265776172645f646973747269627574696f6e0000000000000000000000000061073c565b610acc610bc9565b610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610b617f65726332305f7265776172645f746f6b656e000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fb74d956cf6ec7842d08ebf0ab19ec03a88c1efd4a50ea4349d30f9c4ce512e989181900360200190a150565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b6000805473ffffffffffffffffffffffffffffffffffffffff16610beb610ed6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b60006104267f65726332305f6665655f746f6b656e000000000000000000000000000000000061073c565b610c3a610bc9565b610ca557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ccf7f70726963655f6f7261636c655f70726f7879000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fb36d86785c7d32b1ad714bb705e00e93eccc37b8cf47549043e61e10908ad2519181900360200190a150565b610d23610bc9565b610d8e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610d9781610eda565b50565b610da2610bc9565b610e0d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610e377f66616e746f6d5f6d696e7400000000000000000000000000000000000000000082610e83565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517fb6b8f1859c5c352e5ffad07d0f77e384ac725512c015bd3a3ffc885831c8a4259181900360200190a150565b60009182526001602052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8116610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610fd46026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a265627a7a723158203da322c22d3931984c46c45285961e7dad0c7ea0b65ff6eb9da239ca0798371b64736f6c63430005110032";
    
    // create new contract
    contract = web3.ftm.contract(adrProviderAbi);
    deploy = contract.new({
        data: adrProviderByteCode,
        from: account,
        gas: 4000000
    });
    
    // get the contract address (you may need to wait for the receipt to be available)
    adrProviderAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;   
  8. Add Price Oracle Proxy, Token Registry and special ERC20 tokens to the Address Provider.

    // instantiate the address provider
    var adrProvider = web3.ftm.contract(adrProviderAbi).at(adrProviderAddress);
    
    // assign addresses
    adrProvider.setPriceOracleProxy(priceProxy.address);
    adrProvider.setTokenRegistry(tokenRegistry.address);
      
    // add fee token and reward token to the address provider
    adrProvider.setFeeToken(tokenUSD);
    adrProvider.setRewardToken(tokenWFTM);
  9. Deploy Token Storage contracts for the Collateral and Debt management.

    /**
     * This deploys Fantom DeFi fMint Address Provider
     */
    var storagePoolAbi = JSON.parse('[{"inputs":[{"internalType":"address","name":"_addressProvider","type":"address"},{"internalType":"bool","name":"_dustAdt","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"addressProvider","outputs":[{"internalType":"contract IFantomMintAddressProvider","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"valueDustAdjustment","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"total","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"add","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sub","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]');
    var storagePoolByteCode = "0x608060405234801561001057600080fd5b50604051610fdf380380610fdf8339818101604052604081101561003357600080fd5b50805160209091015160008054911515600160a01b0260ff60a01b196001600160a01b039094166001600160a01b03199093169290921792909216179055610f5f806100806000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636eacd3981161008c578063aa271e1a11610066578063aa271e1a1461025e578063b203bb9914610291578063f1821783146102cc578063f7888aec14610305576100df565b80636eacd398146101f0578063a48028aa14610223578063a64ed8ba14610256576100df565b80634f64b2be116100bd5780634f64b2be1461014b578063551f8e2a1461016857806355ceeb31146101ad576100df565b80632954018c146100e45780632ddbd13a14610115578063496a11401461012f575b600080fd5b6100ec610340565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61011d61035c565b60408051918252519081900360200190f35b61013761040b565b604080519115158252519081900360200190f35b6100ec6004803603602081101561016157600080fd5b503561042c565b6101ab6004803603606081101561017e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610460565b005b6101ab600480360360608110156101c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561059b565b61011d6004803603602081101561020657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106d0565b61011d6004803603602081101561023957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106e2565b61011d61078c565b6101376004803603602081101561027457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610792565b61011d600480360360408110156102a757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610849565b61011d600480360360408110156102e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610866565b61011d6004803603604081101561031b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610b49565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000805b600354811015610407576103fd6103f06003838154811061037d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660026000600386815481106103b957fe5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902054610866565b839063ffffffff610b8116565b9150600101610360565b5090565b60005474010000000000000000000000000000000000000000900460ff1681565b6003818154811061043957fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61046933610792565b6104d457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f746f6b656e2073746f7261676520616363657373207265737472696374656400604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020908152604080832093861683529290522054610517908263ffffffff610b8116565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602090815260408083209387168352928152828220939093556002909252902054610567908263ffffffff610b8116565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604090205561059682610bfc565b505050565b6105a433610792565b61060f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f746f6b656e2073746f7261676520616363657373207265737472696374656400604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff808416600090815260016020908152604080832093861683529290522054610652908263ffffffff610ce216565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529281528282209390935560029092529020546106a2908263ffffffff610ce216565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600260205260409020919091555050565b60026020526000908152604090205481565b6000805b6003548110156107865761077c6103f06003838154811061070357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600386815481106103b957fe5b91506001016106e6565b50919050565b60035490565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663449697116040518163ffffffff1660e01b815260040160206040518083038186803b1580156107fb57600080fd5b505afa15801561080f573d6000803e3d6000fd5b505050506040513d602081101561082557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff8381169116149050919050565b600160209081526000928352604080842090915290825290205481565b60008161087557506000610b43565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663045bb7f86040518163ffffffff1660e01b815260040160206040518083038186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b5051604080517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152915191909216916341976e09916024808301926020929190829003018186803b15801561097a57600080fd5b505afa15801561098e573d6000803e3d6000fd5b505050506040513d60208110156109a457600080fd5b505160008054604080517f057838bd0000000000000000000000000000000000000000000000000000000081529051939450919273ffffffffffffffffffffffffffffffffffffffff9091169163057838bd916004808301926020929190829003018186803b158015610a1657600080fd5b505afa158015610a2a573d6000803e3d6000fd5b505050506040513d6020811015610a4057600080fd5b5051604080517fcefe0f2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301529151919092169163cefe0f21916024808301926020929190829003018186803b158015610ab257600080fd5b505afa158015610ac6573d6000803e3d6000fd5b505050506040513d6020811015610adc57600080fd5b505160ff16600a0a9050610b0681610afa868563ffffffff610d2416565b9063ffffffff610d9716565b60005490935074010000000000000000000000000000000000000000900460ff1615610b4057610b3d83600163ffffffff610b8116565b92505b50505b92915050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600082820183811015610bf557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6000805b600354811015610c67578273ffffffffffffffffffffffffffffffffffffffff1660038281548110610c2e57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610c5f5760019150610c67565b600101610c00565b5080610cde57600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b5050565b6000610bf583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610dd9565b600082610d3357506000610b43565b82820282848281610d4057fe5b0414610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180610f0a6021913960400191505060405180910390fd5b6000610bf583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8a565b60008184841115610e82576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e47578181015183820152602001610e2f565b50505050905090810190601f168015610e745780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315610e47578181015183820152602001610e2f565b506000838581610eff57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820a3f8a0e0396fd0977c25ea45253e5855e8d208df9488c5c4d10d4da1e71e960b64736f6c63430005110032";
    
    // ----------------------------------
    // create new contract for collateral
    // ----------------------------------
    contract = web3.ftm.contract(storagePoolAbi);
    deploy = contract.new(adrProvider.address, false, {
        data: storagePoolByteCode,
        from: account,
        gas: 4000000
    });
    
    // get the contract address (you may need to wait for the receipt to be available)
    collateralPoolAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;
    
    // instantiate the collateral pool contract
    var collateralPool = web3.ftm.contract(storagePoolAbi).at(collateralPoolAddress);
    
    // ----------------------------
    // create new contract for debt
    // ----------------------------
    deploy = contract.new(adrProvider.address, true, {
        data: storagePoolByteCode,
        from: account,
        gas: 4000000
    });
    
    // get the contract address (you may need to wait for the receipt to be available)
    debtPoolAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;
    
    // instantiate the debt pool contract
    var debtPool = web3.ftm.contract(storagePoolAbi).at(debtPoolAddress);
    
    // add pools to the address provider
    adrProvider.setCollateralPool(collateralPool.address);
    adrProvider.setDebtPool(debtPool.address);
  10. Deploy Reward Distribution from this repository.

     /**
      * This deploys Fantom DeFi fMint Reward Distribution
      */
     var rewardDistributionAbi = JSON.parse('[{"inputs":[{"internalType":"address","name":"_addressProvider","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerYear","type":"uint256"}],"name":"RateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"constant":true,"inputs":[],"name":"ERR_DEBT_EXCEEDED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_DEPOSIT_PROHIBITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_ALLOWANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_COLLATERAL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_MINTING_PROHIBITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NOT_AUTHORIZED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_COLLATERAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_ERROR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_DEPLETED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_EARLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_NONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARD_CLAIM_REJECTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_ZERO_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addressProvider","outputs":[{"internalType":"contract IFantomMintAddressProvider","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardPush","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minRewardPushInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"mustRewardClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardApplicableUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rewardClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardEpochEnds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardEpochLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardLastPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerTokenDecimalsCorrection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardStash","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"rewardUpdateGlobal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rewardUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mustRewardPush","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"rewardPush","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_perSecond","type":"uint256"}],"name":"updateRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"principalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"principalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardCanClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"}]');
     var rewardDistributionByteCode = "0x608060405234801561001057600080fd5b50604051611dcb380380611dcb8339818101604052602081101561003357600080fd5b505160006100486001600160e01b036100b716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600780546001600160a01b0319166001600160a01b03929092169190911790556100bb565b3390565b611d01806100ca6000396000f3fe608060405234801561001057600080fd5b50600436106103155760003560e01c806369ea1771116101a7578063a83e53ac116100ee578063c7ea488911610097578063db16e0b511610071578063db16e0b5146105b7578063f2392c8d146105bf578063f2fde38b146105f257610315565b8063c7ea488914610574578063cd3daf9d1461057c578063da0a04321461058457610315565b8063c0464d45116100c8578063c0464d4514610531578063c634dfaa14610539578063c7222c721461056c57610315565b8063a83e53ac14610519578063b76361c214610521578063bc99d6ae1461052957610315565b80638da5cb5b11610150578063911fc3f11161012a578063911fc3f1146105015780639b7ea00714610509578063a664150a1461051157610315565b80638da5cb5b146104d55780638f10369a146104dd5780638f32d59b146104e557610315565b806373a93af61161018157806373a93af6146104bd5780637b0a47ee146104c55780638c7b9980146104cd57610315565b806369ea1771146104905780636e718e04146104ad578063715018a6146104b557610315565b806335052d6e1161026b5780636409f92111610214578063653a8da1116101ee578063653a8da11461044d57806367fc176b1461048057806369d1cb271461048857610315565b80636409f9211461043557806364631d9b1461043d57806364dd213f1461044557610315565b80634846e345116102455780634846e345146103f257806348ebb08d146103fa578063544bb4731461042d57610315565b806335052d6e146103da578063372ce3df146103e25780633ce9b316146103ea57610315565b806316ba6bf3116102cd57806320a0a0e9116102a757806320a0a0e9146103c25780632954018c146103ca5780632bfcc373146103d257610315565b806316ba6bf31461037f578063185463a4146103b25780631ac919b0146103ba57610315565b80630aff90bb116102fe5780630aff90bb1461033c578063101df8b514610344578063125f9e331461034e57610315565b806304b62f291461031a5780630a19dd3314610334575b600080fd5b610322610625565b60408051918252519081900360200190f35b61032261062b565b610322610631565b61034c610637565b005b610356610798565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103226004803603602081101561039557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610835565b6103226108c3565b6103226109f2565b6103226109f8565b6103566109ff565b610322610a1b565b610322610a21565b610322610a26565b610322610a2c565b610322610a32565b61034c6004803603602081101561041057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a38565b610322610aaa565b610322610ab0565b610322610b71565b61034c610b78565b6103226004803603602081101561046357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b90565b610322610ba2565b610322610ba8565b61034c600480360360208110156104a657600080fd5b5035610bae565b610322610ccb565b61034c610cd1565b610322610db3565b610322610db9565b610322610dbf565b610356610dc5565b610322610de1565b6104ed610de7565b604080519115158252519081900360200190f35b610322610e25565b61034c610e2b565b610322610f8a565b610322610f90565b61032261108f565b610322611095565b61032261109b565b6103226004803603602081101561054f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110a2565b6103226111db565b6103226111e1565b6103226111e7565b6104ed6004803603602081101561059a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661123a565b610322611341565b610322600480360360208110156105d557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611354565b61034c6004803603602081101561060857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611366565b61100581565b610f0381565b61100081565b6000610641610ab0565b905061100a8114156106b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6e6f2072657761726473206561726e6564000000000000000000000000000000604482015290519081900360640190fd5b61100b81141561072557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f72657761726420636c61696d2072656a65637465640000000000000000000000604482015290519081900360640190fd5b611008811461079557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f756e6578706563746564206661696c7572650000000000000000000000000000604482015290519081900360640190fd5b50565b600754604080517f69940d79000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916369940d79916004808301926020929190829003018186803b15801561080357600080fd5b505afa158015610817573d6000803e3d6000fd5b505050506040513d602081101561082d57600080fd5b505190505b90565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602090815260408083205460059092528220546108bd91906108b190620f4240906108a590610890906108846111e7565b9063ffffffff6113e216565b610899886110a2565b9063ffffffff61142b16565b9063ffffffff61149e16565b9063ffffffff6114e016565b92915050565b6008546000906108dc906202a30063ffffffff6114e016565b4210156108ec5750610f01610832565b6000610909600954610899600854426113e290919063ffffffff16565b90508061091b57610f02915050610832565b610923610798565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561099f57600080fd5b505afa1580156109b3573d6000803e3d6000fd5b505050506040513d60208110156109c957600080fd5b50518111156109dd57610f03915050610832565b426008556109ea81611554565b600091505090565b61100281565b62093a8081565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b61100681565b600081565b61100981565b60025481565b61100b81565b610a40610b78565b610a49816115ff565b15610a7e57610a5781610835565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660205260409020555b60045473ffffffffffffffffffffffffffffffffffffffff909116600090815260056020526040902055565b60045481565b6000610abb33610a38565b3360009081526006602052604090205480610adb5761100a915050610832565b610ae43361123a565b610af35761100b915050610832565b33600081815260066020526040812055610b339082610b10610798565b73ffffffffffffffffffffffffffffffffffffffff16919063ffffffff61170616565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a2600091505090565b620f424081565b610b806111e7565b600455610b8b611341565b600355565b60056020526000908152604090205481565b610f0181565b61100881565b610bb6610de7565b610c2157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60008111610c9057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420726577617264207261746500000000000000000000000000604482015290519081900360640190fd5b60098190556040805182815290517fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9181900360200190a150565b60035481565b610cd9610de7565b610d4457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61100a81565b60015481565b61100781565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60095481565b6000805473ffffffffffffffffffffffffffffffffffffffff16610e09611798565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b61100381565b6000610e356108c3565b9050610f01811415610ea857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f746f6f206561726c7920666f7220612072657761726473207075736800000000604482015290519081900360640190fd5b610f02811415610f1957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f207265776172647320756e636c6f636b6564000000000000000000000000604482015290519081900360640190fd5b610f0381141561072557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f72657761726473206465706c6574656400000000000000000000000000000000604482015290519081900360640190fd5b60085481565b600754604080517f03ec357f000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916303ec357f916004808301926020929190829003018186803b158015610ffb57600080fd5b505afa15801561100f573d6000803e3d6000fd5b505050506040513d602081101561102557600080fd5b5051604080517f2ddbd13a000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921691632ddbd13a91600480820192602092909190829003018186803b15801561080357600080fd5b61100481565b610a0081565b6202a30081565b600754604080517f03ec357f000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916303ec357f916004808301926020929190829003018186803b15801561110d57600080fd5b505afa158015611121573d6000803e3d6000fd5b505050506040513d602081101561113757600080fd5b5051604080517fa48028aa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151919092169163a48028aa916024808301926020929190829003018186803b1580156111a957600080fd5b505afa1580156111bd573d6000803e3d6000fd5b505050506040513d60208110156111d357600080fd5b505192915050565b610f0281565b61100181565b6000806111f2610f90565b905080611203575050600454610832565b611234611225826108a5620f4240610899600154610899600354610884611341565b6004549063ffffffff6114e016565b91505090565b600754604080517f44969711000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916344969711916004808301926020929190829003018186803b1580156112a557600080fd5b505afa1580156112b9573d6000803e3d6000fd5b505050506040513d60208110156112cf57600080fd5b5051604080517fda0a043200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151919092169163da0a0432916024808301926020929190829003018186803b1580156111a957600080fd5b600061134f4260025461179c565b905090565b60066020526000908152604090205481565b61136e610de7565b6113d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610795816117b2565b600061142483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118ab565b9392505050565b60008261143a575060006108bd565b8282028284828161144757fe5b0414611424576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c826021913960400191505060405180910390fd5b600061142483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061195c565b60008282018381101561142457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61155c610b78565b600254421015611599576000611583600154610899426002546113e290919063ffffffff16565b9050611595828263ffffffff6114e016565b9150505b6115ac8162093a8063ffffffff61149e16565b6001556115c24262093a8063ffffffff6114e016565b600255426003556040805182815290517fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9181900360200190a150565b600754604080517f44969711000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916344969711916004808301926020929190829003018186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b5051604080517f6aee9c1300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519190921691636aee9c13916024808301926020929190829003018186803b1580156111a957600080fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526117939084906119db565b505050565b3390565b60008183106117ab5781611424565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff811661181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c5c6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008184841115611954576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611919578181015183820152602001611901565b50505050905090810190601f1680156119465780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836119c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315611919578181015183820152602001611901565b5060008385816119d157fe5b0495945050505050565b6119fa8273ffffffffffffffffffffffffffffffffffffffff16611c1f565b611a6557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310611ace57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a91565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b30576040519150601f19603f3d011682016040523d82523d6000602084013e611b35565b606091505b509150915081611ba657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611c1957808060200190516020811015611bc257600080fd5b5051611c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611ca3602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611c5357508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820216cbeee939206c00cb0bc8421e2173491b40cd344542454927b8bc2d1705fbc64736f6c63430005110032";
    
     // create new contract
     contract = web3.ftm.contract(rewardDistributionAbi);
     deploy = contract.new(adrProvider.address, {
         data: rewardDistributionByteCode,
         from: account,
         gas: 4000000
     });
        
     // get the contract address (you may need to wait for the receipt to be available)
     rewardDistributionAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;
     
     // instantiate the reward distribution contract
     var rewardDistribution = web3.ftm.contract(rewardDistributionAbi).at(rewardDistributionAddress);
  11. Add the Reward Distribution to the Address Provider.

     adrProvider.setRewardDistribution(rewardDistribution.address);        
  12. Deploy Fantom fMint contract.

    /**
     * This deploys Fantom DeFi fMint Core Minter
     */
    var fMintAbi = JSON.parse('[{"inputs":[{"internalType":"address","name":"_addressProvider","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Repaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"constant":true,"inputs":[],"name":"ERR_DEBT_EXCEEDED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_DEPOSIT_PROHIBITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_ALLOWANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_LOW_COLLATERAL_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_MINTING_PROHIBITED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NOT_AUTHORIZED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_COLLATERAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_ERROR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_NO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_DEPLETED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_EARLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARDS_NONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_REWARD_CLAIM_REJECTED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ERR_ZERO_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"addressProvider","outputs":[{"internalType":"contract IFantomMintAddressProvider","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"collateralCanDecrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"collateralLowestDebtRatio4dec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"collateralRatioDecimalsCorrection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"debtCanIncrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fMintFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fMintFeeDigitsCorrection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mustDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mustMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mustRepay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mustWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardCanClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardEligibilityRatio4dec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardIsEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"debtValueOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"collateralValueOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCollateralPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getDebtPool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getFeeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canDeposit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"checkCollateralCanDecrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"checkDebtCanIncrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"rewardUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPriceDigitsCorrection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"tokenValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]');
    var fMintByteCode = "0x608060405234801561001057600080fd5b50604051612c98380380612c988339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612c35806100636000396000f3fe608060405234801561001057600080fd5b506004361061032b5760003560e01c806367fc176b116101b2578063ae2e933b116100f9578063ca709a25116100a2578063e69993ac1161007c578063e69993ac14610839578063f182178314610874578063f3fef3a3146108ad578063f4305a99146108e65761032b565b8063ca709a2514610831578063cbf02fd514610839578063da0a0432146108415761032b565b8063c2ba4744116100d3578063c2ba4744146107ee578063c7222c7214610821578063c7ea4889146108295761032b565b8063ae2e933b146107d6578063b76361c2146107de578063bc99d6ae146107e65761032b565b80638c7b99801161015b5780639ccf1201116101355780639ccf120114610752578063a02bda7a1461075a578063a03a2689146107935761032b565b80638c7b9980146106ff578063905ca24714610707578063911fc3f11461074a5761032b565b806373a93af61161018c57806373a93af6146106b657806373c9641d146106be578063893ebfd5146106c65761032b565b806367fc176b1461067357806369d1cb271461067b5780636aee9c13146106835761032b565b8063372ce3df1161027657806347e7ef241161021f5780634bf0d331116101f95780634bf0d331146105ff57806350fca4bd14610632578063557c138b1461063a5761032b565b806347e7ef241461058b5780634846e345146105c457806348ebb08d146105cc5761032b565b806340c10f191161025057806340c10f19146104c857806341976e09146105015780634764efb0146105345761032b565b8063372ce3df146104855780633a65a3501461048d5780633b8b09b7146104c05761032b565b80631ac919b0116102d85780632bfcc373116102b25780632bfcc373146104425780632f5739101461044a57806335052d6e1461047d5761032b565b80631ac919b0146103f957806322867d78146104015780632954018c1461043a5761032b565b80630aff90bb116103095780630aff90bb146103835780630feea7391461038b578063173a58fe146103c65761032b565b806303ec357f1461033057806304b62f29146103615780630a19dd331461037b575b600080fd5b610338610929565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103696109c5565b60408051918252519081900360200190f35b6103696109cb565b6103696109d1565b6103c4600480360360408110156103a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109d7565b005b610369600480360360208110156103dc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b97565b610369610cd6565b6103696004803603604081101561041757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cdc565b610338610fe1565b610369610ffd565b6103696004803603602081101561046057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611003565b61036961113c565b610369611141565b610369600480360360208110156104a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611147565b6103696111b2565b610369600480360360408110156104de57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111b8565b6103696004803603602081101561051757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114b2565b6105776004803603606081101561054a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356115b9565b604080519115158252519081900360200190f35b610369600480360360408110156105a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356115ce565b610369611886565b6103c4600480360360208110156105e257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661188c565b6105776004803603602081101561061557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166119ac565b610369611ab3565b6103c46004803603604081101561065057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ab9565b610369611c1a565b610369611c20565b6105776004803603602081101561069957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611c26565b610369611c37565b610338611c3d565b6103c4600480360360408110156106dc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ca8565b610369611e7a565b6105776004803603606081101561071d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611e80565b610369611e9a565b610369611ea0565b6103c46004803603604081101561077057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ea5565b610577600480360360608110156107a957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356120e8565b6103696120f5565b6103696120fb565b610369612101565b6105776004803603602081101561080457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612107565b61036961220e565b610369612214565b61033861221a565b610369612285565b6105776004803603602081101561085757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661228b565b6103696004803603604081101561088a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561229c565b610369600480360360408110156108c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356122d7565b610577600480360360608110156108fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356124da565b600154604080517f03ec357f000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916303ec357f916004808301926020929190829003018186803b15801561099457600080fd5b505afa1580156109a8573d6000803e3d6000fd5b505050506040513d60208110156109be57600080fd5b5051905090565b61100581565b610f0381565b61100081565b60006109e383836122d7565b9050611000811415610a5657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e742065787065637465640000000000000000604482015290519081900360640190fd5b611002811415610ac757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e73756666696369656e7420636f6c6c61746572616c2062616c616e636500604482015290519081900360640190fd5b611005811415610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b916025913960400191505060405180910390fd5b6110088114610b9257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f756e6578706563746564206661696c7572650000000000000000000000000000604482015290519081900360640190fd5b505050565b600154604080517f057838bd000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163057838bd916004808301926020929190829003018186803b158015610c0257600080fd5b505afa158015610c16573d6000803e3d6000fd5b505050506040513d6020811015610c2c57600080fd5b5051604080517fcefe0f2100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151919092169163cefe0f21916024808301926020929190829003018186803b158015610c9e57600080fd5b505afa158015610cb2573d6000803e3d6000fd5b505050506040513d6020811015610cc857600080fd5b505160ff16600a0a92915050565b61100281565b600081610cec5750611000610fdb565b6000610cf6610929565b604080517ff7888aec00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff878116602483015291519293509083169163f7888aec91604480820192602092909190829003018186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6020811015610d9957600080fd5b5051831115610dad57611002915050610fdb565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905173ffffffffffffffffffffffffffffffffffffffff86169163dd62ed3e916044808301926020929190829003018186803b158015610e1f57600080fd5b505afa158015610e33573d6000803e3d6000fd5b505050506040513d6020811015610e4957600080fd5b5051831115610e5d57611003915050610fdb565b604080517f79cc679000000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff8616916379cc679091604480830192600092919082900301818387803b158015610ed157600080fd5b505af1158015610ee5573d6000803e3d6000fd5b50505050610ef23361188c565b604080517f55ceeb3100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018690529151918316916355ceeb319160648082019260009290919082900301818387803b158015610f7057600080fd5b505af1158015610f84573d6000803e3d6000fd5b505060408051868152905133935073ffffffffffffffffffffffffffffffffffffffff881692507f0a3fbbea70e93f2daafa3102f5c9a1b8315e6d7a1e43e4bc020bc1162327470a9181900360200190a360009150505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b61100681565b600154604080517f03ec357f000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916303ec357f916004808301926020929190829003018186803b15801561106e57600080fd5b505afa158015611082573d6000803e3d6000fd5b505050506040513d602081101561109857600080fd5b5051604080517fa48028aa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151919092169163a48028aa916024808301926020929190829003018186803b15801561110a57600080fd5b505afa15801561111e573d6000803e3d6000fd5b505050506040513d602081101561113457600080fd5b505192915050565b600081565b61100981565b600154604080517f73c9641d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916373c9641d916004808301926020929190829003018186803b15801561106e57600080fd5b61753081565b6000816111c85750611001610fdb565b6111d183612107565b6111de5750611007610fdb565b60006111e9846114b2565b9050806111fb57611008915050610fdb565b6112063385856115b9565b61121557611005915050610fdb565b61121e3361188c565b6000611228610929565b9050600061123461221a565b604080517f551f8e2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301526044820189905291519293509084169163551f8e2a9160648082019260009290919082900301818387803b1580156112b557600080fd5b505af11580156112c9573d6000803e3d6000fd5b50505050600061130c6112db83610b97565b6113006127108160196112f48c8b63ffffffff6124f416565b9063ffffffff6124f416565b9063ffffffff61256716565b600054909150611322908263ffffffff6125a916565b6000908155604080517f551f8e2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526044820185905291519186169263551f8e2a9260648084019382900301818387803b15801561139f57600080fd5b505af11580156113b3573d6000803e3d6000fd5b5050604080517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820152602481018a9052905173ffffffffffffffffffffffffffffffffffffffff8b1693506340c10f19925060448083019260209291908290030181600087803b15801561142c57600080fd5b505af1158015611440573d6000803e3d6000fd5b505050506040513d602081101561145657600080fd5b5050604080518781529051339173ffffffffffffffffffffffffffffffffffffffff8a16917f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f09181900360200190a35060009695505050505050565b600154604080517f045bb7f8000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163045bb7f8916004808301926020929190829003018186803b15801561151d57600080fd5b505afa158015611531573d6000803e3d6000fd5b505050506040513d602081101561154757600080fd5b5051604080517f41976e0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152915191909216916341976e09916024808301926020929190829003018186803b15801561110a57600080fd5b60006115c6848484611e80565b949350505050565b6000816115de5750611000610fdb565b6115e7836119ac565b6115f45750611006610fdb565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b15801561166057600080fd5b505afa158015611674573d6000803e3d6000fd5b505050506040513d602081101561168a57600080fd5b505182111561169c5750611002610fdb565b604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152336004820152306024820152905173ffffffffffffffffffffffffffffffffffffffff85169163dd62ed3e916044808301926020929190829003018186803b15801561170e57600080fd5b505afa158015611722573d6000803e3d6000fd5b505050506040513d602081101561173857600080fd5b505182111561174a5750611003610fdb565b611753836114b2565b6117605750611008610fdb565b6117693361188c565b61179173ffffffffffffffffffffffffffffffffffffffff841633308563ffffffff61261d16565b611799611c3d565b604080517f551f8e2a00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018690529151929091169163551f8e2a9160648082019260009290919082900301818387803b15801561181857600080fd5b505af115801561182c573d6000803e3d6000fd5b505060408051858152905133935073ffffffffffffffffffffffffffffffffffffffff871692507f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a79181900360200190a350600092915050565b61100b81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166384d9319e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b5051604080517f48ebb08d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152915191909216916348ebb08d91602480830192600092919082900301818387803b15801561199157600080fd5b505af11580156119a5573d6000803e3d6000fd5b5050505050565b600154604080517f057838bd000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163057838bd916004808301926020929190829003018186803b158015611a1757600080fd5b505afa158015611a2b573d6000803e3d6000fd5b505050506040513d6020811015611a4157600080fd5b5051604080517f4bf0d33100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015291519190921691634bf0d331916024808301926020929190829003018186803b15801561110a57600080fd5b61c35081565b6000611ac58383610cdc565b9050611000811415611b3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e742065787065637465640000000000000000604482015290519081900360640190fd5b611002811415611ba957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e73756666696369656e742064656274206f75747374616e64696e67000000604482015290519081900360640190fd5b611003811415610b2257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e73756666696369656e7420616c6c6f77616e636500000000000000000000604482015290519081900360640190fd5b610f0181565b61100881565b6000610fdb8260008061c3506126b8565b61100a81565b600154604080517f73c9641d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916373c9641d916004808301926020929190829003018186803b15801561099457600080fd5b6000611cb483836111b8565b9050611001811415611d2757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f616d6f756e7420746f6f206c6f77000000000000000000000000000000000000604482015290519081900360640190fd5b611007811415611d9857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6d696e74696e67206f662074686520746f6b656e2070726f6869626974656400604482015290519081900360640190fd5b611008811415611e0957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f6b656e20686173206e6f2076616c75650000000000000000000000000000604482015290519081900360640190fd5b611005811415610b2257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e73756666696369656e7420636f6c6c61746572616c2076616c7565000000604482015290519081900360640190fd5b61100781565b60006115c6846000611e92868661229c565b6175306126b8565b61100381565b601981565b6000611eb183836115ce565b9050611000811415611f2457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f6e2d7a65726f20616d6f756e742065787065637465640000000000000000604482015290519081900360640190fd5b611006811415611f9557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6465706f736974206f662074686520746f6b656e2070726f6869626974656400604482015290519081900360640190fd5b61100281141561200657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e73756666696369656e7420746f6b656e2062616c616e6365000000000000604482015290519081900360640190fd5b61100381141561207757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f616c6c6f77616e6365206e6f7420676976656e00000000000000000000000000604482015290519081900360640190fd5b611008811415610b2257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f746f6b656e20686173206e6f2076616c75650000000000000000000000000000604482015290519081900360640190fd5b60006115c68484846124da565b60005481565b61100481565b610a0081565b600154604080517f057838bd000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163057838bd916004808301926020929190829003018186803b15801561217257600080fd5b505afa158015612186573d6000803e3d6000fd5b505050506040513d602081101561219c57600080fd5b5051604080517fc2ba474400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529151919092169163c2ba4744916024808301926020929190829003018186803b15801561110a57600080fd5b610f0281565b61100181565b600154604080517fca709a25000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163ca709a25916004808301926020929190829003018186803b15801561099457600080fd5b61271081565b6000610fdb826000806175306126b8565b6000816122ab57506000610fdb565b6122d06122b784610b97565b6113006122c3866114b2565b859063ffffffff6124f416565b9392505050565b6000816122e75750611000610fdb565b60006122f1611c3d565b604080517ff7888aec00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff878116602483015291519293509083169163f7888aec91604480820192602092909190829003018186803b15801561236a57600080fd5b505afa15801561237e573d6000803e3d6000fd5b505050506040513d602081101561239457600080fd5b50518311156123a857611002915050610fdb565b6123b33385856120e8565b6123c257611005915050610fdb565b6123cb3361188c565b604080517f55ceeb3100000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018690529151918316916355ceeb319160648082019260009290919082900301818387803b15801561244957600080fd5b505af115801561245d573d6000803e3d6000fd5b506124839250505073ffffffffffffffffffffffffffffffffffffffff8516338561271a565b604080518481529051339173ffffffffffffffffffffffffffffffffffffffff8716917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9181900360200190a35060009392505050565b60006115c6846124ea858561229c565b60006175306126b8565b60008261250357506000610fdb565b8282028284828161251057fe5b04146122d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612bb66021913960400191505060405180910390fd5b60006122d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127a7565b6000828201838110156122d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526126b2908590612863565b50505050565b6000806126d4846126c888611003565b9063ffffffff6125a916565b905060006126f1866126e589611147565b9063ffffffff612aa116565b9050600061270b612710611300858863ffffffff6124f416565b90911015979650505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b92908490612863565b6000818361284d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128125781810151838201526020016127fa565b50505050905090810190601f16801561283f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161285957fe5b0495945050505050565b6128828273ffffffffffffffffffffffffffffffffffffffff16612ae3565b6128ed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b6020831061295657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612919565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129b8576040519150601f19603f3d011682016040523d82523d6000602084013e6129bd565b606091505b509150915081612a2e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156126b257808060200190516020811015612a4a57600080fd5b50516126b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612bd7602a913960400191505060405180910390fd5b60006122d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b1c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906115c6575050151592915050565b60008184841115612b88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283519092839260449091019190850190808383600083156128125781810151838201526020016127fa565b50505090039056fe696e73756666696369656e7420636f6c6c61746572616c2076616c75652072656d61696e73536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820a0182a65d513039f2dc44d42e1a4d6ef560bc91cbb3a65965ed853c5efbe3bf964736f6c63430005110032";
    
    // create new contract
    contract = web3.ftm.contract(fMintAbi);
    deploy = contract.new(adrProvider.address, {
        data: fMintByteCode,
        from: account,
        gas: 4000000
    });
    
    // get the contract address (you may need to wait for the receipt to be available)
    fMintAddress = ftm.getTransactionReceipt(deploy.transactionHash).contractAddress;
    
    // instantiate the fMint contract
    var fMint = web3.ftm.contract(fMintAbi).at(fMintAddress);
  13. Add Fantom fMint to the Address Provider.

        // set the minter address
        adrProvider.setFantomMint(fMint.address);
  14. Enable minter role on the ERC20 tokens for fMint.

    // we will configure ERC20 tokens
    var erc20abi = JSON.parse('[{"inputs":[],"payable":false,"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":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]');
    
    // set USD
    var fUSD = web3.ftm.contract(erc20abi).at(tokenUSD);
    fUSD.addMinter(adrProvider.getFantomMint());

fantom-fmint's People

Contributors

jirkamalek avatar uprendis avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.