derohe
derohe copied to clipboard
fixed issues: RPC DERO.GetTransactions & RPC transfer with integrated addresses; show raw tx when registration fails
Under certain conditions, the node throws a panic message when initiating a RPC call with an orphaned transaction.
curl http://pi:10102/json_rpc -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":"0","method":"DERO.GetTransaction","params":{"txs_hashes":["0000007c31430f3ce55f41c2ef91898618ed3ef7c5e82693b67af50d726d235e"]}}'
{
"jsonrpc": "2.0",
"id": "0",
"error": {
"code": -32098,
"message": "panic occured. stack trace goroutine 245257 [running]:\nruntime/debug.Stack()\n\t/usr/local/go/src/runtime/debug/stack.go:24 +0x68\ngithub.com/deroproject/derohe/cmd/derod/rpc.GetTransaction.func1()\n\t/home/marcel/go/src/github.com/deroproject/derohe/cmd/derod/rpc/rpc_dero_gettransactions.go:39 +0x38\npanic({0x5add80, 0x4005d69860})\n\t/usr/local/go/src/runtime/panic.go:838 +0x20c\ngithub.com/deroproject/derohe/blockchain.(*Blockchain).Find_Blocks_Height_Range(0x4000076c60, 0x401333ba00?, 0x17)\n\t/home/marcel/go/src/github.com/deroproject/derohe/blockchain/storetopo.go:282 +0x2dc\ngithub.com/deroproject/derohe/blockchain.(*Blockchain).IS_TX_Valid(0x4000076c60, {0x0, 0x0, 0x0, 0x7c, 0x31, 0x43, 0xf, 0x3c, 0xe5, ...})\n\t/home/marcel/go/src/github.com/deroproject/derohe/blockchain/blockchain.go:1355 +0xb0\ngithub.com/deroproject/derohe/cmd/derod/rpc.GetTransaction({0x4005762390?, 0x40043f2560?}, {{0x4006280300?, 0xd?, 0x40077ef638?}, 0xa986c?})\n\t/home/marcel/go/src/github.com/deroproject/derohe/cmd/derod/rpc/rpc_dero_gettransactions.go:98 +0x35c\nreflect.Value.call({0x5469e0?, 0x684b50?, 0x4000044d98?}, {0x5e5c5d, 0x4}, {0x40057624b0, 0x2, 0x110fb0?})\n\t/usr/local/go/src/reflect/value.go:556 +0x5e4\nreflect.Value.Call({0x5469e0?, 0x684b50?, 0x57c8e0?}, {0x40057624b0, 0x2, 0x2})\n\t/usr/local/go/src/reflect/value.go:339 +0x98\ngithub.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/handler.(*FuncInfo).Wrap.func10({0x739360?, 0x4005762390?}, 0x4000044e18?)\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/handler/handler.go:244 +0x130\ngithub.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/handler.Func.Handle(0x4000149360?, {0x739360?, 0x4005762390?}, 0x1?)\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/handler/handler.go:25 +0x3c\ngithub.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2.(*Server).invoke(0x40000702a0, {0x7392b8?, 0x40062802c0?}, {0x735a20, 0x400047fb20}, 0x4006280280)\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/server.go:379 +0x100\ngithub.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2.(*Server).dispatch.func1()\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/server.go:230 +0x16c\ngithub.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2.(*Server).serve.func1()\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/server.go:152 +0x5c\ncreated by github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2.(*Server).serve\n\t/home/marcel/go/src/github.com/deroproject/derohe/vendor/github.com/creachadair/jrpc2/server.go:150 +0x28\n"
}
}
The second commit fixes an issue when trying to create a TX with more than 1 integrated address. See issue #92 This function will return in any case.
if addr.IsIntegratedAddress() && len(transfers[t].Payload_RPC) == 0 {
for _, arg := range addr.Arguments {
if arg.Name == rpc.RPC_DESTINATION_PORT && addr.Arguments.Has(rpc.RPC_DESTINATION_PORT, rpc.DataUint64) {
transfers[t].Payload_RPC = append(transfers[t].Payload_RPC, rpc.Argument{Name: rpc.RPC_DESTINATION_PORT, DataType: rpc.DataUint64, Value: addr.Arguments.Value(rpc.RPC_DESTINATION_PORT, rpc.DataUint64).(uint64)})
continue
} else {
fmt.Printf("integrtated address, but don't know how to process\n")
err = fmt.Errorf("integrated address used, but don't know how to process %+v", addr.Arguments)
}
}
return <---- at wrong place
}
The calling function tries to create the TX twice before throwing an error. The first TX with an integrated address goes through, but crashes at the second one.
The 3rd commit shows the raw TX data when registration fails.
The data can be used to register the wallet via DERO.SendRawTransaction RPC call.