Created
February 19, 2017 21:46
-
-
Save AlwaysBCoding/027a7e8fb3eaa59025c82d00f137e35f to your computer and use it in GitHub Desktop.
Ethereum Ðapp Development - Video 13 | Ethereum Name Service (ENS)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Config | |
global.config = { | |
rpc: { | |
host: "localhost", | |
port: "8545" | |
} | |
} | |
// Load Libraries | |
global.solc = require("solc") | |
global.EthTx = require("ethereumjs-tx") | |
global.EthUtil = require("ethereumjs-util") | |
global.fs = require("fs") | |
global.Web3 = require("web3") | |
global.lodash = require("lodash") | |
global.SolidityFunction = require("web3/lib/web3/function") | |
// Connect Web3 Instance | |
// global.web3 = new Web3(new Web3.providers.HttpProvider(`http://${global.config.rpc.host}:${global.config.rpc.port}`)) | |
// global.web3 = new Web3(new Web3.providers.HttpProvider(`https://mainnet.infura.io/EjLdRlni9SfrUBEnnvVt`)) | |
global.web3 = new Web3(new Web3.providers.HttpProvider(`https://ropsten.infura.io/EjLdRlni9SfrUBEnnvVt`)) | |
// ENS | |
// global.ENS = require("ethereum-ens") | |
global.ENS = require("./ensutils.js") | |
global.ens = new ENS(global.web3) | |
// Global Account Accessors | |
// global.acct1 = web3.eth.accounts[0] | |
// global.acct2 = web3.eth.accounts[1] | |
// global.acct3 = web3.eth.accounts[2] | |
// global.acct4 = web3.eth.accounts[3] | |
// global.acct5 = web3.eth.accounts[4] | |
// Helper Functions | |
class Helpers { | |
contractName(source) { | |
var re1 = /contract.*{/g | |
var re2 = /\s\w+\s/ | |
return source.match(re1).pop().match(re2)[0].trim() | |
} | |
createContract(source, options={}) { | |
var compiled = solc.compile(source) | |
var contractName = this.contractName(source) | |
var bytecode = compiled["contracts"][contractName]["bytecode"] | |
var abi = JSON.parse(compiled["contracts"][contractName]["interface"]) | |
var contract = global.web3.eth.contract(abi) | |
var gasEstimate = global.web3.eth.estimateGas({ data: bytecode }) | |
var deployed = contract.new(Object.assign({ | |
from: global.web3.eth.accounts[0], | |
value: global.web3.toWei(3, 'ether'), | |
data: bytecode, | |
gas: gasEstimate, | |
gasPrice: global.web3.eth.gasPrice | |
}, options), (error, result) => { }) | |
return deployed | |
} | |
loadContract(name) { | |
var path = `./${name.toLowerCase()}.sol` | |
return fs.readFileSync(path, 'utf8') | |
} | |
contractObject(name) { | |
var source = this.loadContract(name) | |
var compiled = solc.compile(source) | |
var contractName = this.contractName(source) | |
var bytecode = compiled["contracts"][contractName]["bytecode"] | |
var abi = JSON.parse(compiled["contracts"][contractName]["interface"]) | |
var contract = global.web3.eth.contract(abi) | |
return contract | |
} | |
deployedObject(name, address) { | |
var source = this.loadContract(name) | |
var compiled = solc.compile(source) | |
var contractName = this.contractName(source) | |
var bytecode = compiled["contracts"][contractName]["bytecode"] | |
var abi = JSON.parse(compiled["contracts"][contractName]["interface"]) | |
var contract = global.web3.eth.contract(abi) | |
return contract.at(address) | |
} | |
signContractCall() { | |
var deployed = arguments['0'].deployed | |
var methodName = arguments['0'].methodName | |
var pKeyx = arguments['0'].pKeyx | |
var fromAddress = arguments['0'].fromAddress | |
var args = [...arguments]; var params = args.slice(1, args.length); | |
var solidityFunction = new global.SolidityFunction('', lodash.find(deployed.abi, { name: methodName }), '') | |
var payloadData = solidityFunction.toPayload(params).data | |
var rawTx = { | |
nonce: global.web3.toHex(global.web3.eth.getTransactionCount(fromAddress)), | |
gasPrice: global.web3.toHex(global.web3.eth.gasPrice), | |
gasLimit: global.web3.toHex(300000), | |
to: deployed.address, | |
from: fromAddress, | |
data: payloadData | |
} | |
var tx = new global.EthTx(rawTx) | |
tx.sign(pKeyx) | |
return tx.serialize().toString('hex') | |
} | |
callContract() { | |
var deployed = arguments['0'].deployed | |
var methodName = arguments['0'].methodName | |
var pKeyx = arguments['0'].pKeyx | |
var fromAddress = arguments['0'].fromAddress | |
var args = [...arguments]; var params = args.slice(1, args.length); | |
var solidityFunction = new global.SolidityFunction('', lodash.find(deployed.abi, { name: methodName }), '') | |
var payloadData = solidityFunction.toPayload(params).data | |
var rawTx = { | |
nonce: global.web3.toHex(global.web3.eth.getTransactionCount(fromAddress)), | |
gasPrice: global.web3.toHex(global.web3.eth.gasPrice), | |
gasLimit: global.web3.toHex(arguments['0'].gas || 300000), | |
to: deployed.address, | |
from: fromAddress, | |
data: payloadData | |
} | |
var tx = new global.EthTx(rawTx) | |
tx.sign(pKeyx) | |
var txData = tx.serialize().toString('hex') | |
global.web3.eth.sendRawTransaction(`0x${txData}`, (error, txHash) => { | |
if(error) { | |
console.log(`ERROR...`) | |
console.log(error) | |
} else { | |
console.log(`TxHash...`) | |
console.log(txHash) | |
} | |
}) | |
return true | |
} | |
deployContract(name, options={}) { | |
var source = this.loadContract(name) | |
return this.createContract(source, options) | |
} | |
etherBalance(contract) { | |
switch(typeof(contract)) { | |
case "object": | |
if(contract.address) { | |
return global.web3.fromWei(global.web3.eth.getBalance(contract.address), 'ether').toNumber() | |
} else { | |
return new Error("cannot call getEtherBalance on an object that does not have a property 'address'") | |
} | |
break | |
case "string": | |
return global.web3.fromWei(global.web3.eth.getBalance(contract), 'ether').toNumber() | |
break | |
} | |
} | |
} | |
// Load Helpers into Decypher namespace | |
global.decypher = new Helpers() | |
// Start repl | |
require('repl').start({}) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var ensContractABI = [ | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"name": "resolver", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"name": "owner", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "label", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "setSubnodeOwner", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "ttl", | |
"type": "uint64" | |
} | |
], | |
"name": "setTTL", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"name": "ttl", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "uint64" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "resolver", | |
"type": "address" | |
} | |
], | |
"name": "setResolver", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "setOwner", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "Transfer", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": true, | |
"name": "label", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "NewOwner", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "resolver", | |
"type": "address" | |
} | |
], | |
"name": "NewResolver", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "ttl", | |
"type": "uint64" | |
} | |
], | |
"name": "NewTTL", | |
"type": "event" | |
} | |
] | |
var auctionRegistrarContractABI = [ | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
} | |
], | |
"name": "releaseDeed", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "unhashedName", | |
"type": "string" | |
} | |
], | |
"name": "invalidateName", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"name": "value", | |
"type": "uint256" | |
}, | |
{ | |
"name": "salt", | |
"type": "bytes32" | |
} | |
], | |
"name": "shaBid", | |
"outputs": [ | |
{ | |
"name": "sealedBid", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"name": "entries", | |
"outputs": [ | |
{ | |
"name": "status", | |
"type": "uint8" | |
}, | |
{ | |
"name": "deed", | |
"type": "address" | |
}, | |
{ | |
"name": "registrationDate", | |
"type": "uint256" | |
}, | |
{ | |
"name": "value", | |
"type": "uint256" | |
}, | |
{ | |
"name": "highestBid", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "ens", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
} | |
], | |
"name": "transferRegistrars", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"name": "sealedBids", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "transfer", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
} | |
], | |
"name": "finalizeAuction", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "_owner", | |
"type": "address" | |
}, | |
{ | |
"name": "_value", | |
"type": "uint256" | |
}, | |
{ | |
"name": "_salt", | |
"type": "bytes32" | |
} | |
], | |
"name": "unsealBid", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "registryCreated", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "sealedBid", | |
"type": "bytes32" | |
} | |
], | |
"name": "newBid", | |
"outputs": [], | |
"payable": true, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "seal", | |
"type": "bytes32" | |
} | |
], | |
"name": "cancelBid", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hashes", | |
"type": "bytes32[]" | |
} | |
], | |
"name": "startAuctions", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "_hash", | |
"type": "bytes32" | |
} | |
], | |
"name": "startAuction", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "rootNode", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"name": "_ens", | |
"type": "address" | |
}, | |
{ | |
"name": "_rootNode", | |
"type": "bytes32" | |
} | |
], | |
"type": "constructor" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "auctionExpiryDate", | |
"type": "uint256" | |
} | |
], | |
"name": "AuctionStarted", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "deposit", | |
"type": "uint256" | |
} | |
], | |
"name": "NewBid", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": true, | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"name": "value", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"name": "status", | |
"type": "uint8" | |
} | |
], | |
"name": "BidRevealed", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": true, | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"name": "value", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"name": "now", | |
"type": "uint256" | |
} | |
], | |
"name": "HashRegistered", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": false, | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "HashReleased", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"name": "hash", | |
"type": "bytes32" | |
}, | |
{ | |
"indexed": true, | |
"name": "name", | |
"type": "string" | |
}, | |
{ | |
"indexed": false, | |
"name": "value", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"name": "now", | |
"type": "uint256" | |
} | |
], | |
"name": "HashInvalidated", | |
"type": "event" | |
} | |
] | |
var deedContractABI = [ | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "creationDate", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [], | |
"name": "destroyDeed", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "setOwner", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "registrar", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "owner", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "refundRatio", | |
"type": "uint256" | |
} | |
], | |
"name": "closeDeed", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "newRegistrar", | |
"type": "address" | |
} | |
], | |
"name": "setRegistrar", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "newValue", | |
"type": "uint256" | |
} | |
], | |
"name": "setBalance", | |
"outputs": [], | |
"payable": true, | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"type": "constructor" | |
}, | |
{ | |
"payable": true, | |
"type": "fallback" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "OwnerChanged", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [], | |
"name": "DeedClosed", | |
"type": "event" | |
} | |
] | |
var fifsRegistrarABI = [ | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "ens", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"name": "expiryTimes", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "subnode", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "register", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "rootNode", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"name": "ensAddr", | |
"type": "address" | |
}, | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"type": "constructor" | |
} | |
] | |
var resolverContractABI = [ | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "interfaceID", | |
"type": "bytes4" | |
} | |
], | |
"name": "supportsInterface", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"name": "addr", | |
"outputs": [ | |
{ | |
"name": "ret", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "kind", | |
"type": "bytes32" | |
} | |
], | |
"name": "has", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "addr", | |
"type": "address" | |
} | |
], | |
"name": "setAddr", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"name": "content", | |
"outputs": [ | |
{ | |
"name": "ret", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
}, | |
{ | |
"name": "hash", | |
"type": "bytes32" | |
} | |
], | |
"name": "setContent", | |
"outputs": [], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"name": "ensAddr", | |
"type": "address" | |
} | |
], | |
"type": "constructor" | |
}, | |
{ | |
"payable": false, | |
"type": "fallback" | |
} | |
] | |
var reverseRegistrarContractABI = [ | |
{ | |
"constant": false, | |
"inputs": [ | |
{ | |
"name": "owner", | |
"type": "address" | |
} | |
], | |
"name": "claim", | |
"outputs": [ | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "ens", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "address" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [ | |
{ | |
"name": "addr", | |
"type": "address" | |
} | |
], | |
"name": "node", | |
"outputs": [ | |
{ | |
"name": "ret", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"constant": true, | |
"inputs": [], | |
"name": "rootNode", | |
"outputs": [ | |
{ | |
"name": "", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"name": "ensAddr", | |
"type": "address" | |
}, | |
{ | |
"name": "node", | |
"type": "bytes32" | |
} | |
], | |
"payable": false, | |
"type": "constructor" | |
} | |
] | |
class ENS { | |
constructor(web3) { | |
this.web3 = web3; | |
this.ensContract = web3.eth.contract(ensContractABI); | |
this.ens = this.ensContract.at('0x112234455c3a32fd11230c42e7bccd4a84e02010'); | |
this.auctionRegistrarContract = web3.eth.contract(auctionRegistrarContractABI); | |
this.ethRegistrar = this.auctionRegistrarContract.at(this.ens.owner(this.namehash('eth'))); | |
this.deedContract = web3.eth.contract(deedContractABI); | |
this.fifsRegistrarContract = web3.eth.contract(fifsRegistrarABI); | |
this.testRegistrar = this.fifsRegistrarContract.at(this.ens.owner(this.namehash('test'))); | |
this.resolverContract = web3.eth.contract(resolverContractABI); | |
this.publicResolver = this.resolverContract.at('0x4c641fb9bad9b60ef180c31f56051ce826d21a9a'); | |
this.reverseRegistrarContract = web3.eth.contract(reverseRegistrarContractABI); | |
var reverseRegistrar = this.reverseRegistrarContract.at(this.ens.owner(this.namehash('addr.reverse'))); | |
} | |
namehash(name) { | |
var node = '0x0000000000000000000000000000000000000000000000000000000000000000'; | |
if(name != '') { | |
var labels = name.split("."); | |
for(var i = labels.length - 1; i >= 0; i--) { | |
node = this.web3.sha3(node + this.web3.sha3(labels[i]).slice(2), {encoding: 'hex'}); | |
} | |
} | |
return node.toString(); | |
} | |
getAddr(name) { | |
var node = this.namehash(name) | |
var resolverAddress = this.ens.resolver(node); | |
if(resolverAddress == '0x0000000000000000000000000000000000000000') { | |
return resolverAddress; | |
} | |
return this.resolverContract.at(resolverAddress).addr(node); | |
} | |
getContent(name) { | |
var node = this.namehash(name) | |
var resolverAddress = this.ens.resolver(node); | |
if(resolverAddress == '0x0000000000000000000000000000000000000000') { | |
return "0x0000000000000000000000000000000000000000000000000000000000000000"; | |
} | |
return this.resolverContract.at(resolverAddress).content(node); | |
} | |
} | |
module.exports = ENS |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Private Key | |
23e4dfb937932332a3cf17f1fc0541e7dc2b7d0bef81289bfa04a251443b5666 | |
// Ethereum Address | |
0x08cf02070bb9f167556c677da58e6678bbe871fc | |
// Etherscan Account | |
https://testnet.etherscan.io/address/0x08cf02070bb9f167556c677da58e6678bbe871fc |
The new web3 broke a ton of my old code, feels like I'm having to relearn and debug the entire compiling and deploying part all over again.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This script doesn't seem to be compatible with the new web3.
Error: Cannot find module 'web3/lib/web3/function'.