|
|
|
@ -30,7 +30,6 @@ import ( |
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/cmd/utils" |
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/docserver" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/natspec" |
|
|
|
|
"github.com/ethereum/go-ethereum/common/registrar" |
|
|
|
|
"github.com/ethereum/go-ethereum/eth" |
|
|
|
@ -77,8 +76,6 @@ func (r dumbterm) PasswordPrompt(p string) (string, error) { |
|
|
|
|
func (r dumbterm) AppendHistory(string) {} |
|
|
|
|
|
|
|
|
|
type jsre struct { |
|
|
|
|
docRoot string |
|
|
|
|
ds *docserver.DocServer |
|
|
|
|
re *re.JSRE |
|
|
|
|
ethereum *eth.Ethereum |
|
|
|
|
xeth *xeth.XEth |
|
|
|
@ -153,7 +150,6 @@ func newLightweightJSRE(docRoot string, client comms.EthereumClient, datadir str |
|
|
|
|
js := &jsre{ps1: "> "} |
|
|
|
|
js.wait = make(chan *big.Int) |
|
|
|
|
js.client = client |
|
|
|
|
js.ds = docserver.New(docRoot) |
|
|
|
|
|
|
|
|
|
// update state in separare forever blocks
|
|
|
|
|
js.re = re.New(docRoot) |
|
|
|
@ -181,18 +177,17 @@ func newLightweightJSRE(docRoot string, client comms.EthereumClient, datadir str |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func newJSRE(ethereum *eth.Ethereum, docRoot, corsDomain string, client comms.EthereumClient, interactive bool, f xeth.Frontend) *jsre { |
|
|
|
|
js := &jsre{ethereum: ethereum, ps1: "> ", docRoot: docRoot} |
|
|
|
|
js := &jsre{ethereum: ethereum, ps1: "> "} |
|
|
|
|
// set default cors domain used by startRpc from CLI flag
|
|
|
|
|
js.corsDomain = corsDomain |
|
|
|
|
if f == nil { |
|
|
|
|
f = js |
|
|
|
|
} |
|
|
|
|
js.ds = docserver.New(docRoot) |
|
|
|
|
js.xeth = xeth.New(ethereum, f) |
|
|
|
|
js.wait = js.xeth.UpdateState() |
|
|
|
|
js.client = client |
|
|
|
|
if clt, ok := js.client.(*comms.InProcClient); ok { |
|
|
|
|
if offeredApis, err := api.ParseApiString(shared.AllApis, codec.JSON, js.xeth, ethereum, docRoot); err == nil { |
|
|
|
|
if offeredApis, err := api.ParseApiString(shared.AllApis, codec.JSON, js.xeth, ethereum); err == nil { |
|
|
|
|
clt.Initialize(api.Merge(offeredApis...)) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -248,14 +243,14 @@ func (self *jsre) batch(statement string) { |
|
|
|
|
// show summary of current geth instance
|
|
|
|
|
func (self *jsre) welcome() { |
|
|
|
|
self.re.Run(` |
|
|
|
|
(function () { |
|
|
|
|
console.log('instance: ' + web3.version.client); |
|
|
|
|
console.log(' datadir: ' + admin.datadir); |
|
|
|
|
console.log("coinbase: " + eth.coinbase); |
|
|
|
|
var ts = 1000 * eth.getBlock(eth.blockNumber).timestamp; |
|
|
|
|
console.log("at block: " + eth.blockNumber + " (" + new Date(ts) + ")"); |
|
|
|
|
})(); |
|
|
|
|
`) |
|
|
|
|
(function () { |
|
|
|
|
console.log('instance: ' + web3.version.client); |
|
|
|
|
console.log(' datadir: ' + admin.datadir); |
|
|
|
|
console.log("coinbase: " + eth.coinbase); |
|
|
|
|
var ts = 1000 * eth.getBlock(eth.blockNumber).timestamp; |
|
|
|
|
console.log("at block: " + eth.blockNumber + " (" + new Date(ts) + ")"); |
|
|
|
|
})(); |
|
|
|
|
`) |
|
|
|
|
if modules, err := self.supportedApis(); err == nil { |
|
|
|
|
loadedModules := make([]string, 0) |
|
|
|
|
for api, version := range modules { |
|
|
|
@ -281,7 +276,7 @@ func (js *jsre) apiBindings(f xeth.Frontend) error { |
|
|
|
|
apiNames = append(apiNames, a) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
apiImpl, err := api.ParseApiString(strings.Join(apiNames, ","), codec.JSON, js.xeth, js.ethereum, js.docRoot) |
|
|
|
|
apiImpl, err := api.ParseApiString(strings.Join(apiNames, ","), codec.JSON, js.xeth, js.ethereum) |
|
|
|
|
if err != nil { |
|
|
|
|
utils.Fatalf("Unable to determine supported api's: %v", err) |
|
|
|
|
} |
|
|
|
@ -334,7 +329,7 @@ func (js *jsre) apiBindings(f xeth.Frontend) error { |
|
|
|
|
utils.Fatalf("Error setting namespaces: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
js.re.Run(`var GlobalRegistrar = eth.contract(` + registrar.GlobalRegistrarAbi + `); registrar = GlobalRegistrar.at("` + registrar.GlobalRegistrarAddr + `");`) |
|
|
|
|
js.re.Run(`var GlobalRegistrar = eth.contract(` + registrar.GlobalRegistrarAbi + `); registrar = GlobalRegistrar.at("` + registrar.GlobalRegistrarAddr + `");`) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -348,7 +343,7 @@ func (self *jsre) AskPassword() (string, bool) { |
|
|
|
|
|
|
|
|
|
func (self *jsre) ConfirmTransaction(tx string) bool { |
|
|
|
|
if self.ethereum.NatSpec { |
|
|
|
|
notice := natspec.GetNotice(self.xeth, tx, self.ds) |
|
|
|
|
notice := natspec.GetNotice(self.xeth, tx, self.ethereum.HTTPClient()) |
|
|
|
|
fmt.Println(notice) |
|
|
|
|
answer, _ := self.Prompt("Confirm Transaction [y/n]") |
|
|
|
|
return strings.HasPrefix(strings.Trim(answer, " "), "y") |
|
|
|
|