Store to txcache old eth transactions without status
This commit is contained in:
parent
24a783be50
commit
636167c72a
@ -311,8 +311,14 @@ func (p *EthereumParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) (
|
|||||||
if pt.Receipt.GasUsed, err = hexDecodeBig(r.Receipt.GasUsed); err != nil {
|
if pt.Receipt.GasUsed, err = hexDecodeBig(r.Receipt.GasUsed); err != nil {
|
||||||
return nil, errors.Annotatef(err, "GasUsed %v", r.Receipt.GasUsed)
|
return nil, errors.Annotatef(err, "GasUsed %v", r.Receipt.GasUsed)
|
||||||
}
|
}
|
||||||
if pt.Receipt.Status, err = hexDecodeBig(r.Receipt.Status); err != nil {
|
if r.Receipt.Status != "" {
|
||||||
return nil, errors.Annotatef(err, "Status %v", r.Receipt.Status)
|
if pt.Receipt.Status, err = hexDecodeBig(r.Receipt.Status); err != nil {
|
||||||
|
return nil, errors.Annotatef(err, "Status %v", r.Receipt.Status)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// unknown status, use 'U' as status bytes
|
||||||
|
// there is a potential for conflict with value 0x55 but this is not used by any chain at this moment
|
||||||
|
pt.Receipt.Status = []byte{'U'}
|
||||||
}
|
}
|
||||||
ptLogs := make([]*ProtoCompleteTransaction_ReceiptType_LogType, len(r.Receipt.Logs))
|
ptLogs := make([]*ProtoCompleteTransaction_ReceiptType_LogType, len(r.Receipt.Logs))
|
||||||
for i, l := range r.Receipt.Logs {
|
for i, l := range r.Receipt.Logs {
|
||||||
@ -379,9 +385,14 @@ func (p *EthereumParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error) {
|
|||||||
Topics: topics,
|
Topics: topics,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
status := ""
|
||||||
|
// handle a special value []byte{'U'} as unknown state
|
||||||
|
if len(pt.Receipt.Status) != 1 || pt.Receipt.Status[0] != 'U' {
|
||||||
|
status = hexEncodeBig(pt.Receipt.Status)
|
||||||
|
}
|
||||||
rr = &rpcReceipt{
|
rr = &rpcReceipt{
|
||||||
GasUsed: hexEncodeBig(pt.Receipt.GasUsed),
|
GasUsed: hexEncodeBig(pt.Receipt.GasUsed),
|
||||||
Status: hexEncodeBig(pt.Receipt.Status),
|
Status: status,
|
||||||
Logs: logs,
|
Logs: logs,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,7 +68,7 @@ func TestEthParser_GetAddrDescFromAddress(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var testTx1, testTx2 bchain.Tx
|
var testTx1, testTx2, testTx1Failed, testTx1NoStatus bchain.Tx
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
||||||
@ -156,6 +156,83 @@ func init() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testTx1Failed = bchain.Tx{
|
||||||
|
Blocktime: 1534858022,
|
||||||
|
Time: 1534858022,
|
||||||
|
Txid: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
|
||||||
|
Vin: []bchain.Vin{
|
||||||
|
{
|
||||||
|
Addresses: []string{"0x3E3a3D69dc66bA10737F531ed088954a9EC89d97"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Vout: []bchain.Vout{
|
||||||
|
{
|
||||||
|
ValueSat: *big.NewInt(1999622000000000000),
|
||||||
|
ScriptPubKey: bchain.ScriptPubKey{
|
||||||
|
Addresses: []string{"0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CoinSpecificData: completeTransaction{
|
||||||
|
Tx: &rpcTransaction{
|
||||||
|
AccountNonce: "0xb26c",
|
||||||
|
GasPrice: "0x430e23400",
|
||||||
|
GasLimit: "0x5208",
|
||||||
|
To: "0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f",
|
||||||
|
Value: "0x1bc0159d530e6000",
|
||||||
|
Payload: "0x",
|
||||||
|
Hash: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
|
||||||
|
BlockNumber: "0x41eee8",
|
||||||
|
From: "0x3E3a3D69dc66bA10737F531ed088954a9EC89d97",
|
||||||
|
TransactionIndex: "0xa",
|
||||||
|
},
|
||||||
|
Receipt: &rpcReceipt{
|
||||||
|
GasUsed: "0x5208",
|
||||||
|
Status: "0x0",
|
||||||
|
Logs: []*rpcLog{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
testTx1NoStatus = bchain.Tx{
|
||||||
|
Blocktime: 1534858022,
|
||||||
|
Time: 1534858022,
|
||||||
|
Txid: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
|
||||||
|
Vin: []bchain.Vin{
|
||||||
|
{
|
||||||
|
Addresses: []string{"0x3E3a3D69dc66bA10737F531ed088954a9EC89d97"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Vout: []bchain.Vout{
|
||||||
|
{
|
||||||
|
ValueSat: *big.NewInt(1999622000000000000),
|
||||||
|
ScriptPubKey: bchain.ScriptPubKey{
|
||||||
|
Addresses: []string{"0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CoinSpecificData: completeTransaction{
|
||||||
|
Tx: &rpcTransaction{
|
||||||
|
AccountNonce: "0xb26c",
|
||||||
|
GasPrice: "0x430e23400",
|
||||||
|
GasLimit: "0x5208",
|
||||||
|
To: "0x555Ee11FBDDc0E49A9bAB358A8941AD95fFDB48f",
|
||||||
|
Value: "0x1bc0159d530e6000",
|
||||||
|
Payload: "0x",
|
||||||
|
Hash: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
|
||||||
|
BlockNumber: "0x41eee8",
|
||||||
|
From: "0x3E3a3D69dc66bA10737F531ed088954a9EC89d97",
|
||||||
|
TransactionIndex: "0xa",
|
||||||
|
},
|
||||||
|
Receipt: &rpcReceipt{
|
||||||
|
GasUsed: "0x5208",
|
||||||
|
Status: "",
|
||||||
|
Logs: []*rpcLog{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEthereumParser_PackTx(t *testing.T) {
|
func TestEthereumParser_PackTx(t *testing.T) {
|
||||||
@ -189,6 +266,24 @@ func TestEthereumParser_PackTx(t *testing.T) {
|
|||||||
},
|
},
|
||||||
want: dbtestdata.EthTx2Packed,
|
want: dbtestdata.EthTx2Packed,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "3",
|
||||||
|
args: args{
|
||||||
|
tx: &testTx1Failed,
|
||||||
|
height: 4321000,
|
||||||
|
blockTime: 1534858022,
|
||||||
|
},
|
||||||
|
want: dbtestdata.EthTx1FailedPacked,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "4",
|
||||||
|
args: args{
|
||||||
|
tx: &testTx1NoStatus,
|
||||||
|
height: 4321000,
|
||||||
|
blockTime: 1534858022,
|
||||||
|
},
|
||||||
|
want: dbtestdata.EthTx1NoStatusPacked,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
p := NewEthereumParser(1)
|
p := NewEthereumParser(1)
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
@ -230,6 +325,18 @@ func TestEthereumParser_UnpackTx(t *testing.T) {
|
|||||||
want: &testTx2,
|
want: &testTx2,
|
||||||
want1: 4321000,
|
want1: 4321000,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "3",
|
||||||
|
args: args{hex: dbtestdata.EthTx1FailedPacked},
|
||||||
|
want: &testTx1Failed,
|
||||||
|
want1: 4321000,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "4",
|
||||||
|
args: args{hex: dbtestdata.EthTx1NoStatusPacked},
|
||||||
|
want: &testTx1NoStatus,
|
||||||
|
want1: 4321000,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
p := NewEthereumParser(1)
|
p := NewEthereumParser(1)
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user