Jelajahi Sumber

NatSpec cli option, resolver tests passing

zsfelfoldi 10 tahun lalu
induk
melakukan
c4b7d4d3f7
6 mengubah file dengan 45 tambahan dan 32 penghapusan
  1. 8 4
      cmd/geth/js.go
  2. 1 0
      cmd/geth/main.go
  3. 23 20
      cmd/utils/flags.go
  4. 1 0
      common/resolver/resolver.go
  5. 9 8
      common/resolver/resolver_test.go
  6. 3 0
      eth/backend.go

+ 8 - 4
cmd/geth/js.go

@@ -143,10 +143,14 @@ var net = web3.net;
 var ds, _ = docserver.New(utils.JSpathFlag.String())
 
 func (self *jsre) ConfirmTransaction(tx string) bool {
-	notice := natspec.GetNotice(self.xeth, tx, ds)
-	fmt.Println(notice)
-	answer, _ := self.Prompt("Confirm Transaction\n[y/n] ")
-	return strings.HasPrefix(strings.Trim(answer, " "), "y")
+	if self.ethereum.NatSpec {
+		notice := natspec.GetNotice(self.xeth, tx, ds)
+		fmt.Println(notice)
+		answer, _ := self.Prompt("Confirm Transaction\n[y/n] ")
+		return strings.HasPrefix(strings.Trim(answer, " "), "y")
+	} else {
+		return true
+	}
 }
 
 func (self *jsre) UnlockAccount(addr []byte) bool {

+ 1 - 0
cmd/geth/main.go

@@ -231,6 +231,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.MinerThreadsFlag,
 		utils.MiningEnabledFlag,
 		utils.NATFlag,
+		utils.NatspecEnabledFlag,
 		utils.NodeKeyFileFlag,
 		utils.NodeKeyHexFlag,
 		utils.RPCEnabledFlag,

+ 23 - 20
cmd/utils/flags.go

@@ -93,6 +93,10 @@ var (
 		Name:  "identity",
 		Usage: "node name",
 	}
+	NatspecEnabledFlag = cli.BoolFlag{
+		Name:  "natspec",
+		Usage: "Enable NatSpec confirmation notice",
+	}
 
 	// miner settings
 	MinerThreadsFlag = cli.IntFlag{
@@ -252,26 +256,25 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
 	}
 
 	return &eth.Config{
-		Name:               common.MakeName(clientID, version),
-		DataDir:            ctx.GlobalString(DataDirFlag.Name),
-		ProtocolVersion:    ctx.GlobalInt(ProtocolVersionFlag.Name),
-		BlockChainVersion:  ctx.GlobalInt(BlockchainVersionFlag.Name),
-		SkipBcVersionCheck: false,
-		NetworkId:          ctx.GlobalInt(NetworkIdFlag.Name),
-		LogFile:            ctx.GlobalString(LogFileFlag.Name),
-		LogLevel:           ctx.GlobalInt(LogLevelFlag.Name),
-		LogJSON:            ctx.GlobalString(LogJSONFlag.Name),
-		Etherbase:          ctx.GlobalString(EtherbaseFlag.Name),
-		MinerThreads:       ctx.GlobalInt(MinerThreadsFlag.Name),
-		AccountManager:     GetAccountManager(ctx),
-		VmDebug:            ctx.GlobalBool(VMDebugFlag.Name),
-		MaxPeers:           ctx.GlobalInt(MaxPeersFlag.Name),
-		Port:               ctx.GlobalString(ListenPortFlag.Name),
-		NAT:                GetNAT(ctx),
-		NodeKey:            GetNodeKey(ctx),
-		Shh:                true,
-		Dial:               true,
-		BootNodes:          ctx.GlobalString(BootnodesFlag.Name),
+		Name:            common.MakeName(clientID, version),
+		DataDir:         ctx.GlobalString(DataDirFlag.Name),
+		ProtocolVersion: ctx.GlobalInt(ProtocolVersionFlag.Name),
+		NetworkId:       ctx.GlobalInt(NetworkIdFlag.Name),
+		LogFile:         ctx.GlobalString(LogFileFlag.Name),
+		LogLevel:        ctx.GlobalInt(LogLevelFlag.Name),
+		LogJSON:         ctx.GlobalString(LogJSONFlag.Name),
+		Etherbase:       ctx.GlobalString(EtherbaseFlag.Name),
+		MinerThreads:    ctx.GlobalInt(MinerThreadsFlag.Name),
+		AccountManager:  GetAccountManager(ctx),
+		VmDebug:         ctx.GlobalBool(VMDebugFlag.Name),
+		MaxPeers:        ctx.GlobalInt(MaxPeersFlag.Name),
+		Port:            ctx.GlobalString(ListenPortFlag.Name),
+		NAT:             GetNAT(ctx),
+		NatSpec:         ctx.GlobalBool(NatspecEnabledFlag.Name),
+		NodeKey:         GetNodeKey(ctx),
+		Shh:             true,
+		Dial:            true,
+		BootNodes:       ctx.GlobalString(BootnodesFlag.Name),
 	}
 }
 

+ 1 - 0
common/resolver/resolver.go

@@ -81,5 +81,6 @@ func storageAddress(varidx uint32, key []byte) string {
 	data := make([]byte, 64)
 	binary.BigEndian.PutUint32(data[60:64], varidx)
 	copy(data[0:32], key[0:32])
+	//fmt.Printf("%x %v\n", key, common.Bytes2Hex(crypto.Sha3(data)))
 	return "0x" + common.Bytes2Hex(crypto.Sha3(data))
 }

+ 9 - 8
common/resolver/resolver_test.go

@@ -14,7 +14,7 @@ type testBackend struct {
 
 var (
 	text     = "test"
-	codehash = common.RightPadString("1234", 64)
+	codehash = "1234" //common.RightPadString("1234", 64)
 	hash     = common.Bytes2Hex(crypto.Sha3([]byte(text)))
 	url      = "bzz://bzzhash/my/path/contr.act"
 )
@@ -23,13 +23,13 @@ func NewTestBackend() *testBackend {
 	self := &testBackend{}
 	self.contracts = make(map[string](map[string]string))
 
-	self.contracts[HashRegContractAddress] = make(map[string]string)
-	key := storageAddress(1, common.Hex2Bytes(codehash))
-	self.contracts[HashRegContractAddress][key] = hash
+	self.contracts["0x"+HashRegContractAddress] = make(map[string]string)
+	key := storageAddress(1, common.Hex2BytesFixed(codehash, 32))
+	self.contracts["0x"+HashRegContractAddress][key] = "0x" + hash
 
-	self.contracts[URLHintContractAddress] = make(map[string]string)
-	key = storageAddress(1, common.Hex2Bytes(hash))
-	self.contracts[URLHintContractAddress][key] = url
+	self.contracts["0x"+URLHintContractAddress] = make(map[string]string)
+	key = storageAddress(1, common.Hex2BytesFixed(hash, 32))
+	self.contracts["0x"+URLHintContractAddress][key] = "0x" + common.Bytes2Hex([]byte(url))
 
 	return self
 }
@@ -48,6 +48,7 @@ func TestKeyToContentHash(t *testing.T) {
 	res := New(b, URLHintContractAddress, HashRegContractAddress)
 	chash := common.Hash{}
 	copy(chash[:], common.Hex2BytesFixed(codehash, 32))
+
 	got, err := res.KeyToContentHash(chash)
 	if err != nil {
 		t.Errorf("expected no error, got %v", err)
@@ -62,7 +63,7 @@ func TestContentHashToUrl(t *testing.T) {
 	b := NewTestBackend()
 	res := New(b, URLHintContractAddress, HashRegContractAddress)
 	chash := common.Hash{}
-	copy(chash[:], common.Hex2Bytes(hash))
+	copy(chash[:], common.Hex2BytesFixed(hash, 32))
 	got, err := res.ContentHashToUrl(chash)
 	if err != nil {
 		t.Errorf("expected no error, got %v", err)

+ 3 - 0
eth/backend.go

@@ -50,6 +50,7 @@ type Config struct {
 	LogLevel int
 	LogJSON  string
 	VmDebug  bool
+	NatSpec  bool
 
 	MaxPeers int
 	Port     string
@@ -144,6 +145,7 @@ type Ethereum struct {
 	// logger logger.LogSystem
 
 	Mining        bool
+	NatSpec       bool
 	DataDir       string
 	etherbase     common.Address
 	clientVersion string
@@ -205,6 +207,7 @@ func New(config *Config) (*Ethereum, error) {
 		clientVersion:  config.Name, // TODO should separate from Name
 		ethVersionId:   config.ProtocolVersion,
 		netVersionId:   config.NetworkId,
+		NatSpec:        config.NatSpec,
 	}
 
 	eth.chainManager = core.NewChainManager(blockDb, stateDb, eth.EventMux())