good morning!!!!

Skip to content
Snippets Groups Projects
Commit b46e1521 authored by Zsolt Felföldi's avatar Zsolt Felföldi Committed by Viktor Trón
Browse files

default fallback NatSpec messages

parent 8e6a068d
No related branches found
No related tags found
No related merge requests found
...@@ -143,14 +143,7 @@ var net = web3.net; ...@@ -143,14 +143,7 @@ var net = web3.net;
var ds, _ = docserver.New(utils.JSpathFlag.String()) var ds, _ = docserver.New(utils.JSpathFlag.String())
func (self *jsre) ConfirmTransaction(tx string) bool { func (self *jsre) ConfirmTransaction(tx string) bool {
var notice string notice := natspec.GetNotice(self.xeth, tx, ds)
nat, err := natspec.New(self.xeth, tx, ds)
if err == nil {
notice, err = nat.Notice()
}
if err != nil {
notice = fmt.Sprintf("About to submit transaction: %v")
}
fmt.Println(notice) fmt.Println(notice)
answer, _ := self.Prompt("Confirm Transaction\n[y/n] ") answer, _ := self.Prompt("Confirm Transaction\n[y/n] ")
return strings.HasPrefix(strings.Trim(answer, " "), "y") return strings.HasPrefix(strings.Trim(answer, " "), "y")
......
...@@ -24,6 +24,33 @@ type NatSpec struct { ...@@ -24,6 +24,33 @@ type NatSpec struct {
// abiDoc abiDoc // abiDoc abiDoc
} }
func getFallbackNotice(comment, tx string) string {
return "About to submit transaction (" + comment + "): " + tx
}
func GetNotice(xeth *xeth.XEth, tx string, http *docserver.DocServer) (notice string) {
ns, err := New(xeth, tx, http)
if err != nil {
if ns == nil {
return getFallbackNotice("no NatSpec info found for contract", tx)
} else {
return getFallbackNotice("invalid NatSpec info", tx)
}
}
notice, err2 := ns.Notice()
if err2 != nil {
return getFallbackNotice("couldn't create NatSpec notice", tx)
}
return
}
func New(xeth *xeth.XEth, tx string, http *docserver.DocServer) (self *NatSpec, err error) { func New(xeth *xeth.XEth, tx string, http *docserver.DocServer) (self *NatSpec, err error) {
// extract contract address from tx // extract contract address from tx
...@@ -46,7 +73,7 @@ func New(xeth *xeth.XEth, tx string, http *docserver.DocServer) (self *NatSpec, ...@@ -46,7 +73,7 @@ func New(xeth *xeth.XEth, tx string, http *docserver.DocServer) (self *NatSpec,
return return
} }
codehex := xeth.CodeAt(contractAddress) codehex := xeth.CodeAt(contractAddress)
codeHash := common.BytesToHash(crypto.Sha3(common.Hex2Bytes(codehex))) codeHash := common.BytesToHash(crypto.Sha3(common.Hex2Bytes(codehex[2:])))
// parse out host/domain // parse out host/domain
// set up nameresolver with natspecreg + urlhint contract addresses // set up nameresolver with natspecreg + urlhint contract addresses
......
...@@ -32,7 +32,9 @@ type testFrontend struct { ...@@ -32,7 +32,9 @@ type testFrontend struct {
} }
const testNotice = "Register key `_key` <- content `_content`" const testNotice = "Register key `_key` <- content `_content`"
const testExpNotice = "Register key 8.9477152217924674838424037953991966239322087453347756267410168184682657981552e+76 <- content 2.9345842665291639932787537650068479186757226656217642728276414736233000517704e+76" const testExpNotice = "Register key 7.8620552293692941353904828453472309202657763561546399188096247518683806402731e+76 <- content 2.9345842665291639932787537650068479186757226656217642728276414736233000517704e+76"
const testExpNotice2 = `About to submit transaction (couldn't create NatSpec notice): {"id":6,"jsonrpc":"2.0","method":"eth_transact","params":[{"from":"0xe273f01c99144c438695e10f24926dc1f9fbf62d","to":"0x0000000000000000000000000000000000000009","value":"100000000000","gas":"100000","gasPrice":"100000","data":"0x31e12c20"}]}`
const testExpNotice3 = `About to submit transaction (no NatSpec info found for contract): {"id":6,"jsonrpc":"2.0","method":"eth_transact","params":[{"from":"0xe273f01c99144c438695e10f24926dc1f9fbf62d","to":"0x0000000000000000000000000000000000000008","value":"100000000000","gas":"100000","gasPrice":"100000","data":"0xd66d6c1040e128891caf6033850eb422796ecd92ca7393052020b64455cf8ac00c4ac04800000000000000000000000066696c653a2f2f2f746573742e636f6e74656e74"}]}`
const testUserDoc = ` const testUserDoc = `
{ {
...@@ -89,15 +91,7 @@ func (f *testFrontend) ConfirmTransaction(tx string) bool { ...@@ -89,15 +91,7 @@ func (f *testFrontend) ConfirmTransaction(tx string) bool {
if err != nil { if err != nil {
f.t.Errorf("Error creating DocServer: %v", err) f.t.Errorf("Error creating DocServer: %v", err)
} }
nat, err2 := natspec.New(f.xeth, tx, ds) f.lastConfirm = natspec.GetNotice(f.xeth, tx, ds)
if err2 == nil {
f.lastConfirm, err = nat.Notice()
if err != nil {
f.t.Errorf("Notice error: %v", err)
}
} else {
f.t.Errorf("Error creating NatSpec: %v", err2)
}
} }
return true return true
} }
...@@ -270,7 +264,7 @@ func TestNatspecE2E(t *testing.T) { ...@@ -270,7 +264,7 @@ func TestNatspecE2E(t *testing.T) {
dochash := common.BytesToHash(crypto.Sha3([]byte(testDocs))) dochash := common.BytesToHash(crypto.Sha3([]byte(testDocs)))
codehex := tf.xeth.CodeAt(core.ContractAddrHashReg) codehex := tf.xeth.CodeAt(core.ContractAddrHashReg)
codehash := common.BytesToHash(crypto.Sha3(common.Hex2Bytes(codehex))) codehash := common.BytesToHash(crypto.Sha3(common.Hex2Bytes(codehex[2:])))
tf.setOwner() tf.setOwner()
tf.registerNatSpec(codehash, dochash) tf.registerNatSpec(codehash, dochash)
...@@ -288,12 +282,26 @@ func TestNatspecE2E(t *testing.T) { ...@@ -288,12 +282,26 @@ func TestNatspecE2E(t *testing.T) {
} }
t.Logf("url = %v err = %v", url, err2) t.Logf("url = %v err = %v", url, err2)
// NatSpec info for register method of HashReg contract installed
// now using the same transactions to check confirm messages
tf.makeNatSpec = true tf.makeNatSpec = true
tf.registerNatSpec(codehash, dochash) // call again just to get a confirm message tf.registerNatSpec(codehash, dochash)
t.Logf("Confirm message: %v\n", tf.lastConfirm) t.Logf("Confirm message: %v\n", tf.lastConfirm)
if tf.lastConfirm != testExpNotice { if tf.lastConfirm != testExpNotice {
t.Errorf("Wrong confirm message, expected '%v', got '%v'", testExpNotice, tf.lastConfirm) t.Errorf("Wrong confirm message, expected '%v', got '%v'", testExpNotice, tf.lastConfirm)
} }
tf.setOwner()
t.Logf("Confirm message for unknown method: %v\n", tf.lastConfirm)
if tf.lastConfirm != testExpNotice2 {
t.Errorf("Wrong confirm message, expected '%v', got '%v'", testExpNotice2, tf.lastConfirm)
}
tf.registerURL(dochash, "file:///test.content")
t.Logf("Confirm message for unknown contract: %v\n", tf.lastConfirm)
if tf.lastConfirm != testExpNotice3 {
t.Errorf("Wrong confirm message, expected '%v', got '%v'", testExpNotice3, tf.lastConfirm)
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment