Skip to content

Instantly share code, notes, and snippets.

@cloudonshore
Created January 24, 2019 01:57
Show Gist options
  • Save cloudonshore/1cca2a423a433009d93f0bc125b200b5 to your computer and use it in GitHub Desktop.
Save cloudonshore/1cca2a423a433009d93f0bc125b200b5 to your computer and use it in GitHub Desktop.
Deploy 2Chainz reserves contract
const ethers = require('ethers')
// The Contract interface
const abi = [
{
constant: true,
inputs: [],
name: 'owner',
outputs: [
{
name: '',
type: 'address'
}
],
payable: false,
stateMutability: 'view',
type: 'function',
signature: '0x8da5cb5b'
},
{
constant: true,
inputs: [],
name: 'swapContract',
outputs: [
{
name: '',
type: 'address'
}
],
payable: false,
stateMutability: 'view',
type: 'function',
signature: '0x8ea83031'
},
{
constant: true,
inputs: [
{
name: '',
type: 'address'
},
{
name: '',
type: 'address'
}
],
name: 'limitOrders',
outputs: [
{
name: 'c',
type: 'uint256'
},
{
name: 'e',
type: 'uint256'
},
{
name: 'makerAmount',
type: 'uint256'
}
],
payable: false,
stateMutability: 'view',
type: 'function',
signature: '0xd6735d3c'
},
{
constant: true,
inputs: [],
name: 'creationTime',
outputs: [
{
name: '',
type: 'uint256'
}
],
payable: false,
stateMutability: 'view',
type: 'function',
signature: '0xd8270dce'
},
{
inputs: [
{
name: '_swapContract',
type: 'address'
}
],
payable: false,
stateMutability: 'nonpayable',
type: 'constructor',
signature: 'constructor'
},
{
constant: false,
inputs: [
{
name: '_makerToken',
type: 'address'
},
{
name: '_takerToken',
type: 'address'
},
{
name: '_c',
type: 'uint256'
},
{
name: '_e',
type: 'uint256'
},
{
name: '_makerAmount',
type: 'uint256'
}
],
name: 'depositLiquidity',
outputs: [],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
signature: '0xceb231c0'
},
{
constant: false,
inputs: [
{
name: '_makerAddress',
type: 'address'
},
{
name: '_makerAmount',
type: 'uint256'
},
{
name: '_makerToken',
type: 'address'
},
{
name: '_takerAddress',
type: 'address'
},
{
name: '_takerAmount',
type: 'uint256'
},
{
name: '_takerToken',
type: 'address'
},
{
name: '_expiration',
type: 'uint256'
},
{
name: '_nonce',
type: 'uint256'
},
{
name: '_v',
type: 'uint8'
},
{
name: '_r',
type: 'bytes32'
},
{
name: '_s',
type: 'bytes32'
}
],
name: 'fill',
outputs: [],
payable: false,
stateMutability: 'nonpayable',
type: 'function',
signature: '0x1d4d691d'
},
{
constant: true,
inputs: [
{
name: '_takerToken',
type: 'address'
},
{
name: '_makerToken',
type: 'address'
},
{
name: '_takerAmount',
type: 'uint256'
},
{
name: '_makerAmount',
type: 'uint256'
}
],
name: 'getQuote',
outputs: [
{
name: 'c',
type: 'uint256'
},
{
name: 'e',
type: 'uint256'
},
{
name: 'makerAmount',
type: 'uint256'
}
],
payable: false,
stateMutability: 'view',
type: 'function',
signature: '0xf862701f'
}
]
// The bytecode from Solidity, compiling the above source
const bytecode = '0x608060405234801561001057600080fd5b50604051602080610ea68339810180604052602081101561003057600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055504260028190555050610dcd806100d96000396000f3fe608060405260043610610083576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631d4d691d146100885780638da5cb5b146101835780638ea83031146101da578063ceb231c014610231578063d6735d3c146102c0578063d8270dce14610353578063f862701f1461037e575b600080fd5b34801561009457600080fd5b5061018160048036036101608110156100ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050610425565b005b34801561018f57600080fd5b506101986107dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101e657600080fd5b506101ef610803565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023d57600080fd5b506102be600480360360a081101561025457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050610828565b005b3480156102cc57600080fd5b5061032f600480360360408110156102e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b90565b60405180848152602001838152602001828152602001935050505060405180910390f35b34801561035f57600080fd5b50610368610bc7565b6040518082815260200191505060405180910390f35b34801561038a57600080fd5b50610401600480360360808110156103a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610bcd565b60405180848152602001838152602001828152602001935050505060405180910390f35b6000600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508a8160020154101515156104b857600080fd5b60006104ea8260010154600a0a6104dc84600001548f610cf590919063ffffffff16565b610d3390919063ffffffff16565b905088811415156104fa57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d4d691d8e8e8e8e8e8e8e8e8e8e8e6040518c63ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018460ff1660ff1681526020018381526020018281526020019b505050505050505050505050600060405180830381600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b5050505060008890508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561077257600080fd5b505af1158015610786573d6000803e3d6000fd5b505050506040513d602081101561079c57600080fd5b8101908080519060200190929190505050506107c58d8460020154610d5d90919063ffffffff16565b83600201819055505050505050505050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561088457600080fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156108bf57600080fd5b6000859050818173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561099257600080fd5b505afa1580156109a6573d6000803e3d6000fd5b505050506040513d60208110156109bc57600080fd5b81019080805190602001909291905050501115156109d957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b505050506040513d6020811015610ada57600080fd5b8101908080519060200190929190505050506000600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905084816000018190555083816001018190555082816002018190555050505050505050565b6003602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b60025481565b6000806000808514158015610be3575060008414155b151515610bef57600080fd5b610bf7610d7f565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206060604051908101604052908160008201548152602001600182015481526020016002820154815250509050600086141515610cc45780600001518160200151826040015193509350935050610ceb565b600085141515610ce95780600001518160200151826040015193509350935050610ceb565b505b9450945094915050565b600080831415610d085760009050610d2d565b60008284029050828482811515610d1b57fe5b04141515610d2857600080fd5b809150505b92915050565b60008082111515610d4357600080fd5b60008284811515610d5057fe5b0490508091505092915050565b6000828211151515610d6e57600080fd5b600082840390508091505092915050565b606060405190810160405280600081526020016000815260200160008152509056fea165627a7a72305820aae83463685f80ec4ed01e9a0a303d6d08d3e793d4afa037f15ea445c842de1e0029'
// Connect to the network
const provider = ethers.getDefaultProvider('rinkeby')
// Load the wallet to deploy the contract with
const privateKey = '[INSERT PRIVATE KEY]'
const wallet = new ethers.Wallet(privateKey, provider)
// Create an instance of a Contract Factory
const factory = new ethers.ContractFactory(abi, bytecode, wallet)
// Notice we pass in "Hello World" as the parameter to the constructor
factory.deploy('0x07fc7c43d8168a2730344e5cf958aaecc3b42b41').then(async contract => {
// The address the Contract WILL have once mined
// See: https://ropsten.etherscan.io/address/0x2bd9aaa2953f988153c8629926d22a6a5f69b14e
console.log(contract.address)
// "0x2bD9aAa2953F988153c8629926D22A6a5F69b14E"
// The transaction that was sent to the network to deploy the Contract
// See: https://ropsten.etherscan.io/tx/0x159b76843662a15bd67e482dcfbee55e8e44efad26c5a614245e12a00d4b1a51
console.log(contract.deployTransaction.hash)
// "0x159b76843662a15bd67e482dcfbee55e8e44efad26c5a614245e12a00d4b1a51"
// The contract is NOT deployed yet; we must wait until it is mined
await contract.deployed()
})
// Done! The contract is deployed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment