|
|
|
// Copyright 2019 The go-ethereum Authors
|
|
|
|
// This file is part of go-ethereum.
|
|
|
|
//
|
|
|
|
// go-ethereum is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// go-ethereum is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
// This file is a test-utility for testing clef-functionality
|
|
|
|
//
|
|
|
|
// Start clef with
|
|
|
|
//
|
|
|
|
// build/bin/clef --4bytedb=./cmd/clef/4byte.json --rpc
|
|
|
|
//
|
|
|
|
// Start geth with
|
|
|
|
//
|
|
|
|
// build/bin/geth --nodiscover --maxpeers 0 --signer http://localhost:8550 console --preload=cmd/clef/tests/testsigner.js
|
|
|
|
//
|
|
|
|
// and in the console simply invoke
|
|
|
|
//
|
|
|
|
// > test()
|
|
|
|
//
|
|
|
|
// You can reload the file via `reload()`
|
|
|
|
|
|
|
|
function reload(){
|
|
|
|
loadScript("./cmd/clef/tests/testsigner.js");
|
|
|
|
}
|
|
|
|
|
|
|
|
function init(){
|
|
|
|
if (typeof accts == 'undefined' || accts.length == 0){
|
|
|
|
accts = eth.accounts
|
|
|
|
console.log("Got accounts ", accts);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
init()
|
|
|
|
function testTx(){
|
|
|
|
if( accts && accts.length > 0) {
|
|
|
|
var a = accts[0]
|
|
|
|
var txdata = eth.signTransaction({from: a, to: a, value: 1, nonce: 1, gas: 1, gasPrice: 1})
|
|
|
|
var v = parseInt(txdata.tx.v)
|
|
|
|
console.log("V value: ", v)
|
|
|
|
if (v == 37 || v == 38){
|
|
|
|
console.log("Mainnet 155-protected chainid was used")
|
|
|
|
}
|
|
|
|
if (v == 27 || v == 28){
|
|
|
|
throw new Error("Mainnet chainid was used, but without replay protection!")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function testSignText(){
|
|
|
|
if( accts && accts.length > 0){
|
|
|
|
var a = accts[0]
|
|
|
|
var r = eth.sign(a, "0x68656c6c6f20776f726c64"); //hello world
|
|
|
|
console.log("signing response", r)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function testClique(){
|
|
|
|
if( accts && accts.length > 0){
|
|
|
|
var a = accts[0]
|
|
|
|
var r = debug.testSignCliqueBlock(a, 0); // Sign genesis
|
|
|
|
console.log("signing response", r)
|
|
|
|
if( a != r){
|
|
|
|
throw new Error("Requested signing by "+a+ " but got sealer "+r)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function test(){
|
|
|
|
var tests = [
|
|
|
|
testTx,
|
|
|
|
testSignText,
|
|
|
|
testClique,
|
|
|
|
]
|
|
|
|
for( i in tests){
|
|
|
|
try{
|
|
|
|
tests[i]()
|
|
|
|
}catch(err){
|
|
|
|
console.log(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|