mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 14:16:44 +00:00
swarm: Add code to generate genesis JSON for swarm testnet
This commit is contained in:
parent
5b3b3cb3d8
commit
4c62ffd55d
6 changed files with 198 additions and 3 deletions
|
|
@ -21,7 +21,7 @@ const (
|
||||||
|
|
||||||
// by default ens root is north internal
|
// by default ens root is north internal
|
||||||
var (
|
var (
|
||||||
toyNetEnsRoot = common.HexToAddress("0x606aabab27f8aa98b772bf593b18e550ede87176")
|
toyNetEnsRoot = common.HexToAddress("0xd344889e0be3e9ef6c26b0f60ef66a32e83c1b69")
|
||||||
)
|
)
|
||||||
|
|
||||||
// separate bzz directories
|
// separate bzz directories
|
||||||
|
|
|
||||||
60
swarm/cmd/makegenesis/genesis.json
Normal file
60
swarm/cmd/makegenesis/genesis.json
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
"nonce": "0x42",
|
||||||
|
"gasLimit": "0x47e7c4",
|
||||||
|
"difficulty": "0x20000",
|
||||||
|
"alloc": {
|
||||||
|
"866b5394fe446751e932b7ef77280f4ab7ea3afe": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "01c51307a94a7800"
|
||||||
|
},
|
||||||
|
"0000000000000000000000000000000000000000": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "3aecf856b58800"
|
||||||
|
},
|
||||||
|
"0000000000000000000000000000000000000001": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "01"
|
||||||
|
},
|
||||||
|
"0000000000000000000000000000000000000002": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "01"
|
||||||
|
},
|
||||||
|
"0000000000000000000000000000000000000003": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "01"
|
||||||
|
},
|
||||||
|
"0000000000000000000000000000000000000004": {
|
||||||
|
"code": "",
|
||||||
|
"storage": {},
|
||||||
|
"balance": "01"
|
||||||
|
},
|
||||||
|
"cb7152b03774fd01a8480001b2bcdfebc4f04363": {
|
||||||
|
"code": "6060604052361561004b5760e060020a60003504632dff694181146100535780633b3b57de1461007557806341b9dc2b146100a0578063c3d014d614610139578063d5fa2b00146101b2575b61022b610002565b61022d6004356000818152600260205260408120549081141561027057610002565b61023f600435600081815260016020526040812054600160a060020a03169081141561027057610002565b61025c60043560243560007f6164647200000000000000000000000000000000000000000000000000000000821480156100f05750600083815260016020526040812054600160a060020a031614155b8061013257507f636f6e74656e740000000000000000000000000000000000000000000000000082148015610132575060008381526002602052604081205414155b9392505050565b61022b600435602435600080546040805160e060020a6302571be30281526004810186905290518593600160a060020a033381169416926302571be392602482810193602093839003909101908290876161da5a03f11561000257505060405151600160a060020a031691909114905061027557610002565b61022b600435602435600080546040805160e060020a6302571be30281526004810186905290518593600160a060020a033381169416926302571be392602482810193602093839003909101908290876161da5a03f11561000257505060405151600160a060020a03169190911490506102c157610002565b005b60408051918252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b604080519115158252519081900360200190f35b919050565b6000838152600260209081526040918290208490558151848152915185927f0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc92908290030190a2505050565b600083815260016020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff1916851790558151600160a060020a0385168152915185927f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd292908290030190a250505056",
|
||||||
|
"storage": {
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000000": "d344889e0be3e9ef6c26b0f60ef66a32e83c1b69"
|
||||||
|
},
|
||||||
|
"balance": ""
|
||||||
|
},
|
||||||
|
"d344889e0be3e9ef6c26b0f60ef66a32e83c1b69": {
|
||||||
|
"code": "606060405260e060020a60003504630178b8bf811461004757806302571be31461006e5780631896f70a14610091578063569cd595146100c55780635b0fc9c3146100fc575b005b610130600435600081815260208190526040902060010154600160a060020a03165b919050565b610130600435600081815260208190526040902054600160a060020a0316610069565b6100456004356024356000828152602081905260409020548290600160a060020a0390811633919091161461014d57610002565b6100456004356024356044356000838152602081905260408120548490600160a060020a039081163391909116146101bf57610002565b6100456004356024356000828152602081905260409020548290600160a060020a0390811633919091161461025957610002565b60408051600160a060020a03929092168252519081900360200190f35b60408051600160a060020a0384168152905184917f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a0919081900360200190a2506000828152602081905260409020600101805473ffffffffffffffffffffffffffffffffffffffff1916821790555050565b60408051868152602081810187905282519182900383018220600160a060020a03871683529251929450869288927fce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e8292908290030190a382600060005060008460001916815260200190815260200160002060005060000160006101000a815481600160a060020a03021916908302179055505050505050565b60408051600160a060020a0384168152905184917fd4735d920b0f87494915f556dd9b54c8f309026070caea5c737245152564d266919081900360200190a2506000828152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff191682179055505056",
|
||||||
|
"storage": {
|
||||||
|
"859ecef2e168dc10231b000bd53493b42bc9d944cac29d94582c1e1d43592131": "582c767cca9d78699b04ba8dd7c33071f2d74003"
|
||||||
|
},
|
||||||
|
"balance": ""
|
||||||
|
},
|
||||||
|
"582c767cca9d78699b04ba8dd7c33071f2d74003": {
|
||||||
|
"code": "606060405260e060020a6000350463d22057a9811461001b575b005b61001960043560243560025460408051918252602082810185905260008054835194859003840185207f02571be300000000000000000000000000000000000000000000000000000000865260048601819052935193949193600160a060020a03909116926302571be39260248181019391829003018187876161da5a03f11561000257505060405151915050600160a060020a0381166000148015906100d4575033600160a060020a031681600160a060020a031614155b156100de57610002565b60408051600080546002547f569cd59500000000000000000000000000000000000000000000000000000000845260048401526024830188905230600160a060020a039081166044850152935193169263569cd595926064818101939291829003018183876161da5a03f11561000257505060008054600154604080517f1896f70a00000000000000000000000000000000000000000000000000000000815260048101889052600160a060020a0392831660248201529051929091169350631896f70a926044828101939192829003018183876161da5a03f11561000257505060008054604080517f5b0fc9c300000000000000000000000000000000000000000000000000000000815260048101879052600160a060020a0388811660248301529151929091169350635b0fc9c3926044828101939192829003018183876161da5a03f115610002575050505050505056",
|
||||||
|
"storage": {
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000000": "d344889e0be3e9ef6c26b0f60ef66a32e83c1b69",
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000001": "cb7152b03774fd01a8480001b2bcdfebc4f04363",
|
||||||
|
"0000000000000000000000000000000000000000000000000000000000000002": "93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"
|
||||||
|
},
|
||||||
|
"balance": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
103
swarm/cmd/makegenesis/makegenesis.js
Normal file
103
swarm/cmd/makegenesis/makegenesis.js
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
var Account = require('ethereumjs-account');
|
||||||
|
var async = require('async');
|
||||||
|
var fs = require('fs');
|
||||||
|
var rlp = require('rlp');
|
||||||
|
var solc = require('solc');
|
||||||
|
var Transaction = require('ethereumjs-tx');
|
||||||
|
var Trie = require('merkle-patricia-tree');
|
||||||
|
var utils = require('ethereumjs-util');
|
||||||
|
var VM = require('ethereumjs-vm');
|
||||||
|
|
||||||
|
var stateTrie = new Trie();
|
||||||
|
var vm = new VM(stateTrie);
|
||||||
|
|
||||||
|
var privatekey = utils.sha3("swarm");
|
||||||
|
var accountAddress = utils.privateToAddress(privatekey);
|
||||||
|
|
||||||
|
var accounts = {
|
||||||
|
"0000000000000000000000000000000000000001": "0x1",
|
||||||
|
"0000000000000000000000000000000000000002": "0x1",
|
||||||
|
"0000000000000000000000000000000000000003": "0x1",
|
||||||
|
"0000000000000000000000000000000000000004": "0x1",
|
||||||
|
};
|
||||||
|
accounts[accountAddress.toString('hex')] = "0x200000000000000";
|
||||||
|
|
||||||
|
var source = fs.readFileSync('../../services/ens/contract/ens.sol').toString();
|
||||||
|
var compiled = solc.compile(source, 1)
|
||||||
|
var deployer = "0x" + compiled.contracts['DeployENS'].bytecode;
|
||||||
|
|
||||||
|
var transactions = [
|
||||||
|
{
|
||||||
|
nonce: '0x00',
|
||||||
|
gasPrice: '0x4a817c800',
|
||||||
|
gasLimit: '0x3d0900',
|
||||||
|
value: '0x00',
|
||||||
|
data: deployer
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
function createAccounts(cb) {
|
||||||
|
async.each(Object.keys(accounts), function(addr, next) {
|
||||||
|
var account = new Account();
|
||||||
|
account.balance = accounts[addr];
|
||||||
|
stateTrie.put(new Buffer(addr, 'hex'), account.serialize(), next);
|
||||||
|
}, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
function runTx(cb) {
|
||||||
|
async.each(transactions, function(txdata, next) {
|
||||||
|
var tx = new Transaction(txdata);
|
||||||
|
tx.sign(privatekey);
|
||||||
|
vm.runTx({tx: tx}, next);
|
||||||
|
}, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
function dumpState(cb) {
|
||||||
|
var stream = stateTrie.createReadStream();
|
||||||
|
|
||||||
|
var accountList = [];
|
||||||
|
stream.on('data', function(data) {
|
||||||
|
accountList.push(data);
|
||||||
|
});
|
||||||
|
stream.on('end', function(err) {
|
||||||
|
var accountData = {};
|
||||||
|
async.each(accountList, function(data, next) {
|
||||||
|
var storage = {};
|
||||||
|
|
||||||
|
var account = new Account(data.value);
|
||||||
|
var storageTrie = stateTrie.copy();
|
||||||
|
storageTrie.root = account.stateRoot;
|
||||||
|
|
||||||
|
var storageStream = storageTrie.createReadStream();
|
||||||
|
storageStream.on('data', function(data) {
|
||||||
|
storage[data.key.toString('hex')] = rlp.decode(data.value).toString('hex')
|
||||||
|
});
|
||||||
|
storageStream.on('end', function(err) {
|
||||||
|
account.getCode(stateTrie, function(err, code) {
|
||||||
|
var address = data.key.toString('hex');
|
||||||
|
accountData[address] = {
|
||||||
|
code: code.toString('hex'),
|
||||||
|
storage: storage,
|
||||||
|
balance: account.balance.toString('hex')
|
||||||
|
};
|
||||||
|
next(err);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}, function(err) {
|
||||||
|
console.log(JSON.stringify({
|
||||||
|
nonce: '0x42',
|
||||||
|
gasLimit: '0x47e7c4',
|
||||||
|
difficulty: '0x20000',
|
||||||
|
alloc: accountData
|
||||||
|
}, null, 4));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async.series([
|
||||||
|
createAccounts,
|
||||||
|
runTx,
|
||||||
|
dumpState
|
||||||
|
], function(err) {
|
||||||
|
console.log("Error: " + err);
|
||||||
|
});
|
||||||
15
swarm/cmd/makegenesis/package.json
Normal file
15
swarm/cmd/makegenesis/package.json
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "makegenesis",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"async": "^2.0.1",
|
||||||
|
"ethereumjs-account": "^2.0.3",
|
||||||
|
"ethereumjs-block": "^1.2.2",
|
||||||
|
"ethereumjs-tx": "^1.1.2",
|
||||||
|
"ethereumjs-util": "^4.5.0",
|
||||||
|
"ethereumjs-vm": "^1.4.0",
|
||||||
|
"merkle-patricia-tree": "^2.1.2",
|
||||||
|
"rlp": "^2.0.0",
|
||||||
|
"solc": "0.3.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -215,3 +215,15 @@ contract PublicResolver is Resolver {
|
||||||
ContentChanged(node, hash);
|
ContentChanged(node, hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
contract DeployENS {
|
||||||
|
function DeployENS() {
|
||||||
|
var tld = sha3('eth');
|
||||||
|
var tldnode = sha3(bytes32(0), tld);
|
||||||
|
var ens = new ENS(this);
|
||||||
|
var registrar = new FIFSRegistrar(ens, tldnode);
|
||||||
|
ens.setOwner(0, tld, registrar);
|
||||||
|
ens.setOwner(0, 0);
|
||||||
|
selfdestruct(msg.sender);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
package ens
|
package ens
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/big"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
||||||
|
|
@ -141,7 +142,9 @@ func (self *ENS) Register(name string) (*types.Transaction, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return registrar.Register(label, self.TransactOpts.From)
|
opts := self.TransactOpts
|
||||||
|
opts.GasLimit = big.NewInt(200000)
|
||||||
|
return registrar.Contract.Register(&opts, label, self.TransactOpts.From)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetContentHash sets the content hash associated with a name. Only works if the caller
|
// SetContentHash sets the content hash associated with a name. Only works if the caller
|
||||||
|
|
@ -154,5 +157,7 @@ func (self *ENS) SetContentHash(name string, hash common.Hash) (*types.Transacti
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return resolver.SetContent(node, hash)
|
opts := self.TransactOpts
|
||||||
|
opts.GasLimit = big.NewInt(200000)
|
||||||
|
return resolver.Contract.SetContent(&opts, node, hash)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue