Store to txcache old eth transactions without status
This commit is contained in:
parent
24a783be50
commit
636167c72a
@ -311,9 +311,15 @@ 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 r.Receipt.Status != "" {
|
||||||
if pt.Receipt.Status, err = hexDecodeBig(r.Receipt.Status); err != nil {
|
if pt.Receipt.Status, err = hexDecodeBig(r.Receipt.Status); err != nil {
|
||||||
return nil, errors.Annotatef(err, "Status %v", r.Receipt.Status)
|
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 {
|
||||||
a, err := hexutil.Decode(l.Address)
|
a, err := hexutil.Decode(l.Address)
|
||||||
@ -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 {
|
||||||
|
|||||||
@ -20,6 +20,8 @@ const (
|
|||||||
|
|
||||||
EthTxidB1T1 = "cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b"
|
EthTxidB1T1 = "cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b"
|
||||||
EthTx1Packed = "08e8dd870210a6a6f0db051a6908ece40212050430e234001888a40122081bc0159d530e60003220cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b3a14555ee11fbddc0e49a9bab358a8941ad95ffdb48f42143e3a3d69dc66ba10737f531ed088954a9ec89d97480a22070a025208120101"
|
EthTx1Packed = "08e8dd870210a6a6f0db051a6908ece40212050430e234001888a40122081bc0159d530e60003220cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b3a14555ee11fbddc0e49a9bab358a8941ad95ffdb48f42143e3a3d69dc66ba10737f531ed088954a9ec89d97480a22070a025208120101"
|
||||||
|
EthTx1FailedPacked = "08e8dd870210a6a6f0db051a6908ece40212050430e234001888a40122081bc0159d530e60003220cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b3a14555ee11fbddc0e49a9bab358a8941ad95ffdb48f42143e3a3d69dc66ba10737f531ed088954a9ec89d97480a22040a025208"
|
||||||
|
EthTx1NoStatusPacked = "08e8dd870210a6a6f0db051a6908ece40212050430e234001888a40122081bc0159d530e60003220cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b3a14555ee11fbddc0e49a9bab358a8941ad95ffdb48f42143e3a3d69dc66ba10737f531ed088954a9ec89d97480a22070a025208120155"
|
||||||
EthTxidB1T2 = "a9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101"
|
EthTxidB1T2 = "a9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b101"
|
||||||
EthTx2Packed = "08e8dd870210a6a6f0db051aa20108d001120509502f900018d5e1042a44a9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab24000003220a9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b1013a144af4114f73d1c1c903ac9e0361b379d1291808a2421420cd153de35d469ba46127a0c8f18626b59a256a22a8010a02cb391201011a9e010a144af4114f73d1c1c903ac9e0361b379d1291808a2122000000000000000000000000000000000000000000000021e19e0c9bab24000001a20ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef1a2000000000000000000000000020cd153de35d469ba46127a0c8f18626b59a256a1a20000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f"
|
EthTx2Packed = "08e8dd870210a6a6f0db051aa20108d001120509502f900018d5e1042a44a9059cbb000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f00000000000000000000000000000000000000000000021e19e0c9bab24000003220a9cd088aba2131000da6f38a33c20169baee476218deea6b78720700b895b1013a144af4114f73d1c1c903ac9e0361b379d1291808a2421420cd153de35d469ba46127a0c8f18626b59a256a22a8010a02cb391201011a9e010a144af4114f73d1c1c903ac9e0361b379d1291808a2122000000000000000000000000000000000000000000000021e19e0c9bab24000001a20ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef1a2000000000000000000000000020cd153de35d469ba46127a0c8f18626b59a256a1a20000000000000000000000000555ee11fbddc0e49a9bab358a8941ad95ffdb48f"
|
||||||
EthTxidB2T1 = "c2c3dd1ecb00e8a6d81f793d24387cf2947a313e94ab03b1fb22cd63320f6c91"
|
EthTxidB2T1 = "c2c3dd1ecb00e8a6d81f793d24387cf2947a313e94ab03b1fb22cd63320f6c91"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user