Skip to main content

Here's a node.js script that deterministically computes an Ethereum contract address given the contract creator's public address and nonce value.

Let me know if anyone has questions about inputs, etc.

//node version: v9.10.0 //module versions: //[email protected] //[email protected] const rlp = require('rlp'); const keccak = require('keccak'); var nonce = 0x00; //The nonce must be a hex literal! var sender = '0x6ac7ea33f8831ea9dcc53393aaa88b25a785dbf0'; //Requires a hex string as input! var input_arr = [ sender, nonce ]; var rlp_encoded = rlp.encode(input_arr); var contract_address_long = keccak('keccak256').update(rlp_encoded).digest('hex'); var contract_address = contract_address_long.substring(24); //Trim the first 24 characters. console.log("contract_address: " + contract_address); 
// node version: v9.10.0 // module versions: // [email protected] // [email protected] const rlp = require("rlp"); const keccak = require("keccak"); var nonce = 0x00; //The nonce must be a hex literal! var sender = "0x6ac7ea33f8831ea9dcc53393aaa88b25a785dbf0"; //Requires a hex string as input! var input_arr = [sender, nonce]; var rlp_encoded = rlp.encode(input_arr); var contract_address_long = keccak("keccak256") .update(rlp_encoded) .digest("hex"); var contract_address = contract_address_long.substring(24); //Trim the first 24 characters. console.log("contract_address: " + contract_address); 

Note that the nonce can be incremented normally, just remember that it's a hex value.

Output (nonce = 0x00):

contract_address: cd234a471b72ba2f1ccf0a70fcaba648a5eecd8d 

Output (nonce = 0x01):

contract_address: 343c43a37d37dff08ae8c4a11544c718abb4fcf8 

Here's a node.js script that deterministically computes an Ethereum contract address given the contract creator's public address and nonce value.

Let me know if anyone has questions about inputs, etc.

//node version: v9.10.0 //module versions: //[email protected] //[email protected] const rlp = require('rlp'); const keccak = require('keccak'); var nonce = 0x00; //The nonce must be a hex literal! var sender = '0x6ac7ea33f8831ea9dcc53393aaa88b25a785dbf0'; //Requires a hex string as input! var input_arr = [ sender, nonce ]; var rlp_encoded = rlp.encode(input_arr); var contract_address_long = keccak('keccak256').update(rlp_encoded).digest('hex'); var contract_address = contract_address_long.substring(24); //Trim the first 24 characters. console.log("contract_address: " + contract_address); 

Note that the nonce can be incremented normally, just remember that it's a hex value.

Output (nonce = 0x00):

contract_address: cd234a471b72ba2f1ccf0a70fcaba648a5eecd8d 

Output (nonce = 0x01):

contract_address: 343c43a37d37dff08ae8c4a11544c718abb4fcf8 

Here's a node.js script that deterministically computes an Ethereum contract address given the contract creator's public address and nonce value.

Let me know if anyone has questions about inputs, etc.

// node version: v9.10.0 // module versions: // [email protected] // [email protected] const rlp = require("rlp"); const keccak = require("keccak"); var nonce = 0x00; //The nonce must be a hex literal! var sender = "0x6ac7ea33f8831ea9dcc53393aaa88b25a785dbf0"; //Requires a hex string as input! var input_arr = [sender, nonce]; var rlp_encoded = rlp.encode(input_arr); var contract_address_long = keccak("keccak256") .update(rlp_encoded) .digest("hex"); var contract_address = contract_address_long.substring(24); //Trim the first 24 characters. console.log("contract_address: " + contract_address); 

Note that the nonce can be incremented normally, just remember that it's a hex value.

Output (nonce = 0x00):

contract_address: cd234a471b72ba2f1ccf0a70fcaba648a5eecd8d 

Output (nonce = 0x01):

contract_address: 343c43a37d37dff08ae8c4a11544c718abb4fcf8 
Source Link

Here's a node.js script that deterministically computes an Ethereum contract address given the contract creator's public address and nonce value.

Let me know if anyone has questions about inputs, etc.

//node version: v9.10.0 //module versions: //[email protected] //[email protected] const rlp = require('rlp'); const keccak = require('keccak'); var nonce = 0x00; //The nonce must be a hex literal! var sender = '0x6ac7ea33f8831ea9dcc53393aaa88b25a785dbf0'; //Requires a hex string as input! var input_arr = [ sender, nonce ]; var rlp_encoded = rlp.encode(input_arr); var contract_address_long = keccak('keccak256').update(rlp_encoded).digest('hex'); var contract_address = contract_address_long.substring(24); //Trim the first 24 characters. console.log("contract_address: " + contract_address); 

Note that the nonce can be incremented normally, just remember that it's a hex value.

Output (nonce = 0x00):

contract_address: cd234a471b72ba2f1ccf0a70fcaba648a5eecd8d 

Output (nonce = 0x01):

contract_address: 343c43a37d37dff08ae8c4a11544c718abb4fcf8