From 714e1f58a49db0c65617faa6e11b69912c9ce866 Mon Sep 17 00:00:00 2001 From: i-norden Date: Thu, 16 Feb 2023 16:53:44 -0600 Subject: [PATCH] refactor (minimize) internal ipld package --- .../ipld/eip2930_test_data/eth-block-12252078 | Bin 50536 -> 0 bytes .../ipld/eip2930_test_data/eth-block-12365585 | Bin 60035 -> 0 bytes .../ipld/eip2930_test_data/eth-block-12365586 | Bin 38164 -> 0 bytes .../eip2930_test_data/eth-receipts-12252078 | Bin 132368 -> 0 bytes .../eip2930_test_data/eth-receipts-12365585 | Bin 127320 -> 0 bytes .../eip2930_test_data/eth-receipts-12365586 | Bin 111330 -> 0 bytes statediff/indexer/ipld/eth_account.go | 175 ------ statediff/indexer/ipld/eth_account_test.go | 297 --------- statediff/indexer/ipld/eth_header.go | 235 +------ statediff/indexer/ipld/eth_header_test.go | 585 ------------------ statediff/indexer/ipld/eth_log.go | 116 +--- statediff/indexer/ipld/eth_log_trie.go | 144 ----- statediff/indexer/ipld/eth_parser.go | 101 +-- statediff/indexer/ipld/eth_receipt.go | 149 +---- statediff/indexer/ipld/eth_receipt_trie.go | 175 ------ statediff/indexer/ipld/eth_state.go | 130 ---- statediff/indexer/ipld/eth_state_test.go | 326 ---------- statediff/indexer/ipld/eth_storage.go | 112 ---- statediff/indexer/ipld/eth_storage_test.go | 140 ----- statediff/indexer/ipld/eth_tx.go | 185 +----- statediff/indexer/ipld/eth_tx_test.go | 411 ------------ statediff/indexer/ipld/eth_tx_trie.go | 146 ----- statediff/indexer/ipld/eth_tx_trie_test.go | 503 --------------- statediff/indexer/ipld/interface.go | 8 + statediff/indexer/ipld/shared.go | 148 ----- .../error-tx-eth-block-body-json-999999 | 1 - .../ipld/test_data/eth-block-body-json-0 | 1 - .../test_data/eth-block-body-json-4139497 | 1 - .../ipld/test_data/eth-block-body-json-997522 | 1 - .../ipld/test_data/eth-block-body-json-999998 | 1 - .../ipld/test_data/eth-block-body-json-999999 | 1 - .../ipld/test_data/eth-block-body-rlp-997522 | Bin 1728 -> 0 bytes .../ipld/test_data/eth-block-body-rlp-999999 | Bin 1768 -> 0 bytes .../test_data/eth-block-header-rlp-999996 | Bin 540 -> 0 bytes .../test_data/eth-block-header-rlp-999997 | Bin 539 -> 0 bytes .../test_data/eth-block-header-rlp-999999 | Bin 539 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-0e8b34 | Bin 115 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-56864f | 1 - .../ipld/test_data/eth-state-trie-rlp-6fc2d7 | 5 - .../ipld/test_data/eth-state-trie-rlp-727994 | Bin 117 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-c9070d | Bin 116 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-d5be90 | Bin 500 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-d7f897 | Bin 532 -> 0 bytes .../ipld/test_data/eth-state-trie-rlp-eb2f5f | Bin 37 -> 0 bytes .../test_data/eth-storage-trie-rlp-000dd0 | Bin 83 -> 0 bytes .../test_data/eth-storage-trie-rlp-113049 | 1 - .../test_data/eth-storage-trie-rlp-9d1860 | 1 - .../test_data/eth-storage-trie-rlp-ffbcad | Bin 44 -> 0 bytes .../test_data/eth-storage-trie-rlp-ffc25c | 1 - .../ipld/test_data/eth-uncle-json-997522-0 | 1 - .../ipld/test_data/eth-uncle-json-997522-1 | 1 - statediff/indexer/ipld/test_data/tx_data | Bin 607 -> 0 bytes statediff/indexer/ipld/trie_node.go | 457 -------------- 53 files changed, 16 insertions(+), 4544 deletions(-) delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-block-12252078 delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-block-12365585 delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-block-12365586 delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-receipts-12252078 delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-receipts-12365585 delete mode 100644 statediff/indexer/ipld/eip2930_test_data/eth-receipts-12365586 delete mode 100644 statediff/indexer/ipld/eth_account.go delete mode 100644 statediff/indexer/ipld/eth_account_test.go delete mode 100644 statediff/indexer/ipld/eth_header_test.go delete mode 100644 statediff/indexer/ipld/eth_log_trie.go delete mode 100644 statediff/indexer/ipld/eth_receipt_trie.go delete mode 100644 statediff/indexer/ipld/eth_state.go delete mode 100644 statediff/indexer/ipld/eth_state_test.go delete mode 100644 statediff/indexer/ipld/eth_storage.go delete mode 100644 statediff/indexer/ipld/eth_storage_test.go delete mode 100644 statediff/indexer/ipld/eth_tx_test.go delete mode 100644 statediff/indexer/ipld/eth_tx_trie.go delete mode 100644 statediff/indexer/ipld/eth_tx_trie_test.go create mode 100644 statediff/indexer/ipld/interface.go delete mode 100644 statediff/indexer/ipld/test_data/error-tx-eth-block-body-json-999999 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-json-0 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-json-4139497 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-json-997522 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-json-999998 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-json-999999 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-rlp-997522 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-body-rlp-999999 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-header-rlp-999996 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-header-rlp-999997 delete mode 100644 statediff/indexer/ipld/test_data/eth-block-header-rlp-999999 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-0e8b34 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-56864f delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-6fc2d7 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-727994 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-c9070d delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-d5be90 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-d7f897 delete mode 100644 statediff/indexer/ipld/test_data/eth-state-trie-rlp-eb2f5f delete mode 100644 statediff/indexer/ipld/test_data/eth-storage-trie-rlp-000dd0 delete mode 100644 statediff/indexer/ipld/test_data/eth-storage-trie-rlp-113049 delete mode 100644 statediff/indexer/ipld/test_data/eth-storage-trie-rlp-9d1860 delete mode 100644 statediff/indexer/ipld/test_data/eth-storage-trie-rlp-ffbcad delete mode 100644 statediff/indexer/ipld/test_data/eth-storage-trie-rlp-ffc25c delete mode 100644 statediff/indexer/ipld/test_data/eth-uncle-json-997522-0 delete mode 100644 statediff/indexer/ipld/test_data/eth-uncle-json-997522-1 delete mode 100644 statediff/indexer/ipld/test_data/tx_data delete mode 100644 statediff/indexer/ipld/trie_node.go diff --git a/statediff/indexer/ipld/eip2930_test_data/eth-block-12252078 b/statediff/indexer/ipld/eip2930_test_data/eth-block-12252078 deleted file mode 100644 index baee170abf465b03c2a68b3909af9291fab7049f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50536 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 diff --git a/statediff/indexer/ipld/eip2930_test_data/eth-block-12365585 b/statediff/indexer/ipld/eip2930_test_data/eth-block-12365585 deleted file mode 100644 index 6f7d87645cb411716955c529a4a24370f5cd0aab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60035 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∋tNwKG(e8E#3(-pP&;4S9Z9V+yW7jg~4-Yr@pT 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 e|7Xol!TKwzhYtV!. - -package ipld - -import ( - "encoding/json" - "fmt" - "math/big" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" -) - -// EthAccountSnapshot (eth-account-snapshot codec 0x97) -// represents an ethereum account, i.e. a wallet address or -// a smart contract -type EthAccountSnapshot struct { - *EthAccount - - cid cid.Cid - rawdata []byte -} - -// EthAccount is the building block of EthAccountSnapshot. -// Or, is the former stripped of its cid and rawdata components. -type EthAccount struct { - Nonce uint64 - Balance *big.Int - Root []byte // This is the storage root trie - CodeHash []byte // This is the hash of the EVM code -} - -// Static (compile time) check that EthAccountSnapshot satisfies the -// node.Node interface. -var _ node.Node = (*EthAccountSnapshot)(nil) - -/* - INPUT -*/ - -// Input should be managed by EthStateTrie - -/* - OUTPUT -*/ - -// Output should be managed by EthStateTrie - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the account snapshot. -func (as *EthAccountSnapshot) RawData() []byte { - return as.rawdata -} - -// Cid returns the cid of the transaction. -func (as *EthAccountSnapshot) Cid() cid.Cid { - return as.cid -} - -// String is a helper for output -func (as *EthAccountSnapshot) String() string { - return fmt.Sprintf("", as.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (as *EthAccountSnapshot) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-account-snapshot", - } -} - -/* - Node INTERFACE -*/ - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (as *EthAccountSnapshot) Resolve(p []string) (interface{}, []string, error) { - if len(p) == 0 { - return as, nil, nil - } - - if len(p) > 1 { - return nil, nil, fmt.Errorf("unexpected path elements past %s", p[0]) - } - - switch p[0] { - case "balance": - return as.Balance, nil, nil - case "codeHash": - return &node.Link{Cid: Keccak256ToCid(RawBinary, as.CodeHash)}, nil, nil - case "nonce": - return as.Nonce, nil, nil - case "root": - return &node.Link{Cid: Keccak256ToCid(MEthStorageTrie, as.Root)}, nil, nil - default: - return nil, nil, ErrInvalidLink - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (as *EthAccountSnapshot) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - return []string{"balance", "codeHash", "nonce", "root"} -} - -// ResolveLink is a helper function that calls resolve and asserts the -// output is a link -func (as *EthAccountSnapshot) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := as.Resolve(p) - if err != nil { - return nil, nil, err - } - - if lnk, ok := obj.(*node.Link); ok { - return lnk, rest, nil - } - - return nil, nil, fmt.Errorf("resolved item was not a link") -} - -// Copy will go away. It is here to comply with the interface. -func (as *EthAccountSnapshot) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -func (as *EthAccountSnapshot) Links() []*node.Link { - return nil -} - -// Stat will go away. It is here to comply with the interface. -func (as *EthAccountSnapshot) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the interface. -func (as *EthAccountSnapshot) Size() (uint64, error) { - return 0, nil -} - -/* - EthAccountSnapshot functions -*/ - -// MarshalJSON processes the transaction into readable JSON format. -func (as *EthAccountSnapshot) MarshalJSON() ([]byte, error) { - out := map[string]interface{}{ - "balance": as.Balance, - "codeHash": Keccak256ToCid(RawBinary, as.CodeHash), - "nonce": as.Nonce, - "root": Keccak256ToCid(MEthStorageTrie, as.Root), - } - return json.Marshal(out) -} diff --git a/statediff/indexer/ipld/eth_account_test.go b/statediff/indexer/ipld/eth_account_test.go deleted file mode 100644 index f7c5341a6..000000000 --- a/statediff/indexer/ipld/eth_account_test.go +++ /dev/null @@ -1,297 +0,0 @@ -package ipld - -import ( - "encoding/json" - "fmt" - "os" - "regexp" - "testing" -) - -/* - Block INTERFACE -*/ -func init() { - if os.Getenv("MODE") != "statediff" { - fmt.Println("Skipping statediff test") - os.Exit(0) - } -} - -func TestAccountSnapshotBlockElements(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - if fmt.Sprintf("%x", eas.RawData())[:10] != "f84e808a03" { - t.Fatal("Wrong Data") - } - - if eas.Cid().String() != - "baglqcgzasckx2alxk43cksshnztjvhfyvbbh6bkp376gtcndm5cg4fkrkhsa" { - t.Fatal("Wrong Cid") - } -} - -func TestAccountSnapshotString(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - if eas.String() != - "" { - t.Fatalf("Wrong String()") - } -} - -func TestAccountSnapshotLoggable(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - l := eas.Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-account-snapshot" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-account-snapshot", l["type"]) - } -} - -/* - Node INTERFACE -*/ -func TestAccountSnapshotResolve(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - // Empty path - obj, rest, err := eas.Resolve([]string{}) - reas, ok := obj.(*EthAccountSnapshot) - if !ok { - t.Fatalf("Wrong type of returned object\r\nexpected %T\r\ngot %T", &EthAccountSnapshot{}, reas) - } - if reas.Cid() != eas.Cid() { - t.Fatalf("wrong returned CID\r\nexpected %s\r\ngot %s", eas.Cid().String(), reas.Cid().String()) - } - if rest != nil { - t.Fatal("rest should be nil") - } - if err != nil { - t.Fatal("err should be nil") - } - - // len(p) > 1 - badCases := [][]string{ - {"two", "elements"}, - {"here", "three", "elements"}, - {"and", "here", "four", "elements"}, - } - - for _, bc := range badCases { - obj, rest, err = eas.Resolve(bc) - if obj != nil { - t.Fatal("obj should be nil") - } - if rest != nil { - t.Fatal("rest should be nil") - } - if err.Error() != fmt.Sprintf("unexpected path elements past %s", bc[0]) { - t.Fatal("wrong error") - } - } - - moreBadCases := []string{ - "i", - "am", - "not", - "an", - "account", - "field", - } - for _, mbc := range moreBadCases { - obj, rest, err = eas.Resolve([]string{mbc}) - if obj != nil { - t.Fatal("obj should be nil") - } - if rest != nil { - t.Fatal("rest should be nil") - } - if err != ErrInvalidLink { - t.Fatal("wrong error") - } - } - - goodCases := []string{ - "balance", - "codeHash", - "nonce", - "root", - } - for _, gc := range goodCases { - _, _, err = eas.Resolve([]string{gc}) - if err != nil { - t.Fatalf("error should be nil %v", gc) - } - } -} - -func TestAccountSnapshotTree(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - // Bad cases - tree := eas.Tree("non-empty-string", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = eas.Tree("non-empty-string", 1) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = eas.Tree("", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - // Good cases - tree = eas.Tree("", 1) - lookupElements := map[string]interface{}{ - "balance": nil, - "codeHash": nil, - "nonce": nil, - "root": nil, - } - - if len(tree) != len(lookupElements) { - t.Fatalf("Wrong number of elements\r\nexpected %d\r\ngot %d", len(lookupElements), len(tree)) - } - - for _, te := range tree { - if _, ok := lookupElements[te]; !ok { - t.Fatalf("Unexpected Element: %v", te) - } - } -} - -func TestAccountSnapshotResolveLink(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - // bad case - obj, rest, err := eas.ResolveLink([]string{"supercalifragilist"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err != ErrInvalidLink { - t.Fatal("Wrong error") - } - - // good case - obj, rest, err = eas.ResolveLink([]string{"nonce"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err.Error() != "resolved item was not a link" { - t.Fatal("Wrong error") - } -} - -func TestAccountSnapshotCopy(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - defer func() { - r := recover() - if r == nil { - t.Fatal("Expected panic") - } - if r != "implement me" { - t.Fatalf("Wrong panic message\r\n expected %s\r\ngot %s", "'implement me'", r) - } - }() - - _ = eas.Copy() -} - -func TestAccountSnapshotLinks(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - if eas.Links() != nil { - t.Fatal("Links() expected to return nil") - } -} - -func TestAccountSnapshotStat(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - obj, err := eas.Stat() - if obj == nil { - t.Fatal("Expected a not null object node.NodeStat") - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -func TestAccountSnapshotSize(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - size, err := eas.Size() - if size != uint64(0) { - t.Fatalf("Wrong size\r\nexpected %d\r\ngot %d", 0, size) - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -/* - EthAccountSnapshot functions -*/ - -func TestAccountSnapshotMarshalJSON(t *testing.T) { - eas := prepareEthAccountSnapshot(t) - - jsonOutput, err := eas.MarshalJSON() - checkError(err, t) - - var data map[string]interface{} - err = json.Unmarshal(jsonOutput, &data) - checkError(err, t) - - balanceExpression := regexp.MustCompile(`{"balance":16011846000000000000000,`) - if !balanceExpression.MatchString(string(jsonOutput)) { - t.Fatal("Balance expression not found") - } - - code, _ := data["codeHash"].(map[string]interface{}) - if fmt.Sprintf("%s", code["/"]) != - "bafkrwigf2jdadbxxem6je7t5wlomoa6a4ualmu6kqittw6723acf3bneoa" { - t.Fatalf("Wrong Marshaled Value\r\nexpected %s\r\ngot %s", "bafkrwigf2jdadbxxem6je7t5wlomoa6a4ualmu6kqittw6723acf3bneoa", fmt.Sprintf("%s", code["/"])) - } - - if fmt.Sprintf("%v", data["nonce"]) != "0" { - t.Fatalf("Wrong Marshaled Value\r\nexpected %s\r\ngot %s", "0", fmt.Sprintf("%v", data["nonce"])) - } - - root, _ := data["root"].(map[string]interface{}) - if fmt.Sprintf("%s", root["/"]) != - "bagmacgzak3ub6fy3zrk2n74dixtjfqhynznurya3tfwk3qabmix3ly3dwqqq" { - t.Fatalf("Wrong Marshaled Value\r\nexpected %s\r\ngot %s", "bagmacgzak3ub6fy3zrk2n74dixtjfqhynznurya3tfwk3qabmix3ly3dwqqq", fmt.Sprintf("%s", root["/"])) - } -} - -/* - AUXILIARS -*/ -func prepareEthAccountSnapshot(t *testing.T) *EthAccountSnapshot { - fi, err := os.Open("test_data/eth-state-trie-rlp-c9070d") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - return output.elements[1].(*EthAccountSnapshot) -} diff --git a/statediff/indexer/ipld/eth_header.go b/statediff/indexer/ipld/eth_header.go index 9bc307277..d71ea4d6f 100644 --- a/statediff/indexer/ipld/eth_header.go +++ b/statediff/indexer/ipld/eth_header.go @@ -17,32 +17,21 @@ package ipld import ( - "encoding/json" - "fmt" - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" mh "github.com/multiformats/go-multihash" - "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/rlp" ) // EthHeader (eth-block, codec 0x90), represents an ethereum block header type EthHeader struct { - *types.Header - cid cid.Cid rawdata []byte } // Static (compile time) check that EthHeader satisfies the node.Node interface. -var _ node.Node = (*EthHeader)(nil) - -/* - INPUT -*/ +var _ IPLD = (*EthHeader)(nil) // NewEthHeader converts a *types.Header into an EthHeader IPLD node func NewEthHeader(header *types.Header) (*EthHeader, error) { @@ -55,34 +44,11 @@ func NewEthHeader(header *types.Header) (*EthHeader, error) { return nil, err } return &EthHeader{ - Header: header, cid: c, rawdata: headerRLP, }, nil } -/* - OUTPUT -*/ - -// DecodeEthHeader takes a cid and its raw binary data -// from IPFS and returns an EthTx object for further processing. -func DecodeEthHeader(c cid.Cid, b []byte) (*EthHeader, error) { - h := new(types.Header) - if err := rlp.DecodeBytes(b, h); err != nil { - return nil, err - } - return &EthHeader{ - Header: h, - cid: c, - rawdata: b, - }, nil -} - -/* - Block INTERFACE -*/ - // RawData returns the binary of the RLP encode of the block header. func (b *EthHeader) RawData() []byte { return b.rawdata @@ -92,202 +58,3 @@ func (b *EthHeader) RawData() []byte { func (b *EthHeader) Cid() cid.Cid { return b.cid } - -// String is a helper for output -func (b *EthHeader) String() string { - return fmt.Sprintf("", b.cid) -} - -// Loggable returns a map the type of IPLD Link. -func (b *EthHeader) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-header", - } -} - -/* - Node INTERFACE -*/ - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (b *EthHeader) Resolve(p []string) (interface{}, []string, error) { - if len(p) == 0 { - return b, nil, nil - } - - first, rest := p[0], p[1:] - - switch first { - case "parent": - return &node.Link{Cid: commonHashToCid(MEthHeader, b.ParentHash)}, rest, nil - case "receipts": - return &node.Link{Cid: commonHashToCid(MEthTxReceiptTrie, b.ReceiptHash)}, rest, nil - case "root": - return &node.Link{Cid: commonHashToCid(MEthStateTrie, b.Root)}, rest, nil - case "tx": - return &node.Link{Cid: commonHashToCid(MEthTxTrie, b.TxHash)}, rest, nil - case "uncles": - return &node.Link{Cid: commonHashToCid(MEthHeaderList, b.UncleHash)}, rest, nil - } - - if len(p) != 1 { - return nil, nil, fmt.Errorf("unexpected path elements past %s", first) - } - - switch first { - case "bloom": - return b.Bloom, nil, nil - case "coinbase": - return b.Coinbase, nil, nil - case "difficulty": - return b.Difficulty, nil, nil - case "extra": - // This is a []byte. By default they are marshalled into Base64. - return fmt.Sprintf("0x%x", b.Extra), nil, nil - case "gaslimit": - return b.GasLimit, nil, nil - case "gasused": - return b.GasUsed, nil, nil - case "mixdigest": - return b.MixDigest, nil, nil - case "nonce": - return b.Nonce, nil, nil - case "number": - return b.Number, nil, nil - case "time": - return b.Time, nil, nil - default: - return nil, nil, ErrInvalidLink - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (b *EthHeader) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - - return []string{ - "time", - "bloom", - "coinbase", - "difficulty", - "extra", - "gaslimit", - "gasused", - "mixdigest", - "nonce", - "number", - "parent", - "receipts", - "root", - "tx", - "uncles", - } -} - -// ResolveLink is a helper function that allows easier traversal of links through blocks -func (b *EthHeader) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := b.Resolve(p) - if err != nil { - return nil, nil, err - } - - if lnk, ok := obj.(*node.Link); ok { - return lnk, rest, nil - } - - return nil, nil, fmt.Errorf("resolved item was not a link") -} - -// Copy will go away. It is here to comply with the Node interface. -func (b *EthHeader) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -// HINT: Use `ipfs refs ` -func (b *EthHeader) Links() []*node.Link { - return []*node.Link{ - {Cid: commonHashToCid(MEthHeader, b.ParentHash)}, - {Cid: commonHashToCid(MEthTxReceiptTrie, b.ReceiptHash)}, - {Cid: commonHashToCid(MEthStateTrie, b.Root)}, - {Cid: commonHashToCid(MEthTxTrie, b.TxHash)}, - {Cid: commonHashToCid(MEthHeaderList, b.UncleHash)}, - } -} - -// Stat will go away. It is here to comply with the Node interface. -func (b *EthHeader) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the Node interface. -func (b *EthHeader) Size() (uint64, error) { - return 0, nil -} - -/* - EthHeader functions -*/ - -// MarshalJSON processes the block header into readable JSON format, -// converting the right links into their cids, and keeping the original -// hex hash, allowing the user to simplify external queries. -func (b *EthHeader) MarshalJSON() ([]byte, error) { - out := map[string]interface{}{ - "time": b.Time, - "bloom": b.Bloom, - "coinbase": b.Coinbase, - "difficulty": b.Difficulty, - "extra": fmt.Sprintf("0x%x", b.Extra), - "gaslimit": b.GasLimit, - "gasused": b.GasUsed, - "mixdigest": b.MixDigest, - "nonce": b.Nonce, - "number": b.Number, - "parent": commonHashToCid(MEthHeader, b.ParentHash), - "receipts": commonHashToCid(MEthTxReceiptTrie, b.ReceiptHash), - "root": commonHashToCid(MEthStateTrie, b.Root), - "tx": commonHashToCid(MEthTxTrie, b.TxHash), - "uncles": commonHashToCid(MEthHeaderList, b.UncleHash), - } - return json.Marshal(out) -} - -// objJSONHeader defines the output of the JSON RPC API for either -// "eth_BlockByHash" or "eth_BlockByHeader". -type objJSONHeader struct { - Result objJSONHeaderResult `json:"result"` -} - -// objJSONBLockResult is the nested struct that takes -// the contents of the JSON field "result". -type objJSONHeaderResult struct { - types.Header // Use its fields and unmarshaler - *objJSONHeaderResultExt // Add these fields to the parsing -} - -// objJSONBLockResultExt facilitates the composition -// of the field "result", adding to the -// `types.Header` fields, both ommers (their hashes) and transactions. -type objJSONHeaderResultExt struct { - OmmerHashes []common.Hash `json:"uncles"` - Transactions []*types.Transaction `json:"transactions"` -} - -// UnmarshalJSON overrides the function types.Header.UnmarshalJSON, allowing us -// to parse the fields of Header, plus ommer hashes and transactions. -// (yes, ommer hashes. You will need to "eth_getUncleCountByBlockHash" per each ommer) -func (o *objJSONHeaderResult) UnmarshalJSON(input []byte) error { - err := o.Header.UnmarshalJSON(input) - if err != nil { - return err - } - - o.objJSONHeaderResultExt = &objJSONHeaderResultExt{} - err = json.Unmarshal(input, o.objJSONHeaderResultExt) - return err -} diff --git a/statediff/indexer/ipld/eth_header_test.go b/statediff/indexer/ipld/eth_header_test.go deleted file mode 100644 index fa4806fbf..000000000 --- a/statediff/indexer/ipld/eth_header_test.go +++ /dev/null @@ -1,585 +0,0 @@ -package ipld - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "os" - "runtime" - "strconv" - "testing" - - block "github.com/ipfs/go-block-format" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" - - "github.com/ethereum/go-ethereum/core/types" -) - -func TestBlockBodyRlpParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-body-rlp-999999") - checkError(err, t) - - output, _, _, err := FromBlockRLP(fi) - checkError(err, t) - - testEthBlockFields(output, t) -} - -func TestBlockHeaderRlpParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-header-rlp-999999") - checkError(err, t) - - output, _, _, err := FromBlockRLP(fi) - checkError(err, t) - - testEthBlockFields(output, t) -} - -func TestBlockBodyJsonParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-body-json-999999") - checkError(err, t) - - output, _, _, err := FromBlockJSON(fi) - checkError(err, t) - - testEthBlockFields(output, t) -} - -func TestEthBlockProcessTransactionsError(t *testing.T) { - // Let's just change one byte in a field of one of these transactions. - fi, err := os.Open("test_data/error-tx-eth-block-body-json-999999") - checkError(err, t) - - _, _, _, err = FromBlockJSON(fi) - if err == nil { - t.Fatal("Expected an error") - } -} - -// TestDecodeBlockHeader should work for both inputs (block header and block body) -// as what we are storing is just the block header -func TestDecodeBlockHeader(t *testing.T) { - storedEthBlock := prepareStoredEthBlock("test_data/eth-block-header-rlp-999999", t) - - ethBlock, err := DecodeEthHeader(storedEthBlock.Cid(), storedEthBlock.RawData()) - checkError(err, t) - - testEthBlockFields(ethBlock, t) -} - -func TestEthBlockString(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - if ethBlock.String() != "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", ethBlock.String()) - } -} - -func TestEthBlockLoggable(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - l := ethBlock.Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-header" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-header", l["type"]) - } -} - -func TestEthBlockJSONMarshal(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - jsonOutput, err := ethBlock.MarshalJSON() - checkError(err, t) - - var data map[string]interface{} - err = json.Unmarshal(jsonOutput, &data) - checkError(err, t) - - // Testing all fields is boring, but can help us to avoid - // that dreaded regression - if data["bloom"].(string)[:10] != "0x00000000" { - t.Fatalf("Wrong Bloom\r\nexpected %s\r\ngot %s", "0x00000000", data["bloom"].(string)[:10]) - t.Fatal("Wrong Bloom") - } - if data["coinbase"] != "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5" { - t.Fatalf("Wrong coinbase\r\nexpected %s\r\ngot %s", "0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5", data["coinbase"]) - } - if parseFloat(data["difficulty"]) != "12555463106190" { - t.Fatalf("Wrong Difficulty\r\nexpected %s\r\ngot %s", "12555463106190", parseFloat(data["difficulty"])) - } - if data["extra"] != "0xd783010303844765746887676f312e342e32856c696e7578" { - t.Fatalf("Wrong Extra\r\nexpected %s\r\ngot %s", "0xd783010303844765746887676f312e342e32856c696e7578", data["extra"]) - } - if parseFloat(data["gaslimit"]) != "3141592" { - t.Fatalf("Wrong Gas limit\r\nexpected %s\r\ngot %s", "3141592", parseFloat(data["gaslimit"])) - } - if parseFloat(data["gasused"]) != "231000" { - t.Fatalf("Wrong Gas used\r\nexpected %s\r\ngot %s", "231000", parseFloat(data["gasused"])) - } - if data["mixdigest"] != "0x5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0" { - t.Fatalf("Wrong Mix digest\r\nexpected %s\r\ngot %s", "0x5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0", data["mixdigest"]) - } - if data["nonce"] != "0xf491f46b60fe04b3" { - t.Fatalf("Wrong nonce\r\nexpected %s\r\ngot %s", "0xf491f46b60fe04b3", data["nonce"]) - } - if parseFloat(data["number"]) != "999999" { - t.Fatalf("Wrong block number\r\nexpected %s\r\ngot %s", "999999", parseFloat(data["number"])) - } - if parseMapElement(data["parent"]) != "bagiacgza2m6j3xu774hlvjxhd2fsnuv5ufom6ei4ply3mm3jrleeozt7b62a" { - t.Fatalf("Wrong Parent cid\r\nexpected %s\r\ngot %s", "bagiacgza2m6j3xu774hlvjxhd2fsnuv5ufom6ei4ply3mm3jrleeozt7b62a", parseMapElement(data["parent"])) - } - if parseMapElement(data["receipts"]) != "bagkacgzap6qpnsrkagbdecgybaa63ljx4pr2aa5vlsetdg2f5mpzpbrk2iuq" { - t.Fatalf("Wrong Receipt root cid\r\nexpected %s\r\ngot %s", "bagkacgzap6qpnsrkagbdecgybaa63ljx4pr2aa5vlsetdg2f5mpzpbrk2iuq", parseMapElement(data["receipts"])) - } - if parseMapElement(data["root"]) != "baglacgza5wmkus23dhec7m2tmtyikcfobjw6yzs7uv3ghxfjjroxavkm3yia" { - t.Fatalf("Wrong root hash cid\r\nexpected %s\r\ngot %s", "baglacgza5wmkus23dhec7m2tmtyikcfobjw6yzs7uv3ghxfjjroxavkm3yia", parseMapElement(data["root"])) - } - if parseFloat(data["time"]) != "1455404037" { - t.Fatalf("Wrong Time\r\nexpected %s\r\ngot %s", "1455404037", parseFloat(data["time"])) - } - if parseMapElement(data["tx"]) != "bagjacgzair6l3dci6smknejlccbrzx7vtr737s56onoksked2t5anxgxvzka" { - t.Fatalf("Wrong Tx root cid\r\nexpected %s\r\ngot %s", "bagjacgzair6l3dci6smknejlccbrzx7vtr737s56onoksked2t5anxgxvzka", parseMapElement(data["tx"])) - } - if parseMapElement(data["uncles"]) != "bagiqcgzadxge32g6y5oxvk4fwvt3ntgudljreri3ssfhie7qufbp2qgusndq" { - t.Fatalf("Wrong Uncle hash cid\r\nexpected %s\r\ngot %s", "bagiqcgzadxge32g6y5oxvk4fwvt3ntgudljreri3ssfhie7qufbp2qgusndq", parseMapElement(data["uncles"])) - } -} - -func TestEthBlockLinks(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - links := ethBlock.Links() - if links[0].Cid.String() != "bagiacgza2m6j3xu774hlvjxhd2fsnuv5ufom6ei4ply3mm3jrleeozt7b62a" { - t.Fatalf("Wrong cid for parent link\r\nexpected: %s\r\ngot %s", "bagiacgza2m6j3xu774hlvjxhd2fsnuv5ufom6ei4ply3mm3jrleeozt7b62a", links[0].Cid.String()) - } - if links[1].Cid.String() != "bagkacgzap6qpnsrkagbdecgybaa63ljx4pr2aa5vlsetdg2f5mpzpbrk2iuq" { - t.Fatalf("Wrong cid for receipt root link\r\nexpected: %s\r\ngot %s", "bagkacgzap6qpnsrkagbdecgybaa63ljx4pr2aa5vlsetdg2f5mpzpbrk2iuq", links[1].Cid.String()) - } - if links[2].Cid.String() != "baglacgza5wmkus23dhec7m2tmtyikcfobjw6yzs7uv3ghxfjjroxavkm3yia" { - t.Fatalf("Wrong cid for state root link\r\nexpected: %s\r\ngot %s", "baglacgza5wmkus23dhec7m2tmtyikcfobjw6yzs7uv3ghxfjjroxavkm3yia", links[2].Cid.String()) - } - if links[3].Cid.String() != "bagjacgzair6l3dci6smknejlccbrzx7vtr737s56onoksked2t5anxgxvzka" { - t.Fatalf("Wrong cid for tx root link\r\nexpected: %s\r\ngot %s", "bagjacgzair6l3dci6smknejlccbrzx7vtr737s56onoksked2t5anxgxvzka", links[3].Cid.String()) - } - if links[4].Cid.String() != "bagiqcgzadxge32g6y5oxvk4fwvt3ntgudljreri3ssfhie7qufbp2qgusndq" { - t.Fatalf("Wrong cid for uncles root link\r\nexpected: %s\r\ngot %s", "bagiqcgzadxge32g6y5oxvk4fwvt3ntgudljreri3ssfhie7qufbp2qgusndq", links[4].Cid.String()) - } -} - -func TestEthBlockResolveEmptyPath(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, rest, err := ethBlock.Resolve([]string{}) - checkError(err, t) - - if ethBlock != obj.(*EthHeader) { - t.Fatal("Should have returned the same eth-block object") - } - - if len(rest) != 0 { - t.Fatalf("Wrong len of rest of the path returned\r\nexpected %d\r\ngot %d", 0, len(rest)) - } -} - -func TestEthBlockResolveNoSuchLink(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - _, _, err := ethBlock.Resolve([]string{"wewonthavethisfieldever"}) - if err == nil { - t.Fatal("Should have failed with unknown field") - } - - if err != ErrInvalidLink { - t.Fatalf("Wrong error message\r\nexpected %s\r\ngot %s", ErrInvalidLink, err.Error()) - } -} - -func TestEthBlockResolveBloom(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, rest, err := ethBlock.Resolve([]string{"bloom"}) - checkError(err, t) - - // The marshaler of types.Bloom should output it as 0x - bloomInText := fmt.Sprintf("%x", obj.(types.Bloom)) - if bloomInText[:10] != "0000000000" { - t.Fatalf("Wrong Bloom\r\nexpected %s\r\ngot %s", "0000000000", bloomInText[:10]) - } - - if len(rest) != 0 { - t.Fatalf("Wrong len of rest of the path returned\r\nexpected %d\r\ngot %d", 0, len(rest)) - } -} - -func TestEthBlockResolveBloomExtraPathElements(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, rest, err := ethBlock.Resolve([]string{"bloom", "unexpected", "extra", "elements"}) - if obj != nil { - t.Fatal("Returned obj should be nil") - } - - if rest != nil { - t.Fatal("Returned rest should be nil") - } - - if err.Error() != "unexpected path elements past bloom" { - t.Fatalf("Wrong error\r\nexpected %s\r\ngot %s", "unexpected path elements past bloom", err.Error()) - } -} - -func TestEthBlockResolveNonLinkFields(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - testCases := map[string][]string{ - "coinbase": {"%x", "52bc44d5378309ee2abf1539bf71de1b7d7be3b5"}, - "difficulty": {"%s", "12555463106190"}, - "extra": {"%s", "0xd783010303844765746887676f312e342e32856c696e7578"}, - "gaslimit": {"%d", "3141592"}, - "gasused": {"%d", "231000"}, - "mixdigest": {"%x", "5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0"}, - "nonce": {"%x", "f491f46b60fe04b3"}, - "number": {"%s", "999999"}, - "time": {"%d", "1455404037"}, - } - - for field, value := range testCases { - obj, rest, err := ethBlock.Resolve([]string{field}) - checkError(err, t) - - format := value[0] - result := value[1] - if fmt.Sprintf(format, obj) != result { - t.Fatalf("Wrong %v\r\nexpected %v\r\ngot %s", field, result, fmt.Sprintf(format, obj)) - } - - if len(rest) != 0 { - t.Fatalf("Wrong len of rest of the path returned\r\nexpected %d\r\ngot %d", 0, len(rest)) - } - } -} - -func TestEthBlockResolveNonLinkFieldsExtraPathElements(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - testCases := []string{ - "coinbase", - "difficulty", - "extra", - "gaslimit", - "gasused", - "mixdigest", - "nonce", - "number", - "time", - } - - for _, field := range testCases { - obj, rest, err := ethBlock.Resolve([]string{field, "unexpected", "extra", "elements"}) - if obj != nil { - t.Fatal("Returned obj should be nil") - } - - if rest != nil { - t.Fatal("Returned rest should be nil") - } - - if err.Error() != "unexpected path elements past "+field { - t.Fatalf("Wrong error\r\nexpected %s\r\ngot %s", "unexpected path elements past "+field, err.Error()) - } - } -} - -func TestEthBlockResolveLinkFields(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - testCases := map[string]string{ - "parent": "bagiacgza2m6j3xu774hlvjxhd2fsnuv5ufom6ei4ply3mm3jrleeozt7b62a", - "receipts": "bagkacgzap6qpnsrkagbdecgybaa63ljx4pr2aa5vlsetdg2f5mpzpbrk2iuq", - "root": "baglacgza5wmkus23dhec7m2tmtyikcfobjw6yzs7uv3ghxfjjroxavkm3yia", - "tx": "bagjacgzair6l3dci6smknejlccbrzx7vtr737s56onoksked2t5anxgxvzka", - "uncles": "bagiqcgzadxge32g6y5oxvk4fwvt3ntgudljreri3ssfhie7qufbp2qgusndq", - } - - for field, result := range testCases { - obj, rest, err := ethBlock.Resolve([]string{field, "anything", "goes", "here"}) - checkError(err, t) - - lnk, ok := obj.(*node.Link) - if !ok { - t.Fatal("Returned object is not a link") - } - - if lnk.Cid.String() != result { - t.Fatalf("Wrong %s cid\r\nexpected %v\r\ngot %v", field, result, lnk.Cid.String()) - } - - for i, p := range []string{"anything", "goes", "here"} { - if rest[i] != p { - t.Fatalf("Wrong rest of the path returned\r\nexpected %s\r\ngot %s", p, rest[i]) - } - } - } -} - -func TestEthBlockTreeBadParams(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - tree := ethBlock.Tree("non-empty-string", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = ethBlock.Tree("non-empty-string", 1) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = ethBlock.Tree("", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } -} - -func TestEThBlockTree(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - tree := ethBlock.Tree("", 1) - lookupElements := map[string]interface{}{ - "bloom": nil, - "coinbase": nil, - "difficulty": nil, - "extra": nil, - "gaslimit": nil, - "gasused": nil, - "mixdigest": nil, - "nonce": nil, - "number": nil, - "parent": nil, - "receipts": nil, - "root": nil, - "time": nil, - "tx": nil, - "uncles": nil, - } - - if len(tree) != len(lookupElements) { - t.Fatalf("Wrong number of elements\r\nexpected %d\r\ngot %d", len(lookupElements), len(tree)) - } - - for _, te := range tree { - if _, ok := lookupElements[te]; !ok { - t.Fatalf("Unexpected Element: %v", te) - } - } -} - -/* - The two functions above: TestEthBlockResolveNonLinkFields and - TestEthBlockResolveLinkFields did all the heavy lifting. Then, we will - just test two use cases. -*/ -func TestEthBlockResolveLinksBadLink(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, rest, err := ethBlock.ResolveLink([]string{"supercalifragilist"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - - if err != ErrInvalidLink { - t.Fatalf("Expected error\r\nexpected %s\r\ngot %s", ErrInvalidLink, err) - } -} - -func TestEthBlockResolveLinksGoodLink(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, rest, err := ethBlock.ResolveLink([]string{"tx", "0", "0", "0"}) - if obj == nil { - t.Fatalf("Expected valid *node.Link obj to be returned") - } - - if rest == nil { - t.Fatal("Expected rest to be returned") - } - for i, p := range []string{"0", "0", "0"} { - if rest[i] != p { - t.Fatalf("Wrong rest of the path returned\r\nexpected %s\r\ngot %s", p, rest[i]) - } - } - - if err != nil { - t.Fatal("Non error expected") - } -} - -/* - These functions below should go away - We are working on test coverage anyways... -*/ -func TestEthBlockCopy(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - defer func() { - r := recover() - if r == nil { - t.Fatal("Expected panic") - } - if r != "implement me" { - t.Fatalf("Wrong panic message\r\nexpected %s\r\ngot %s", "'implement me'", r) - } - }() - - _ = ethBlock.Copy() -} - -func TestEthBlockStat(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - obj, err := ethBlock.Stat() - if obj == nil { - t.Fatal("Expected a not null object node.NodeStat") - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -func TestEthBlockSize(t *testing.T) { - ethBlock := prepareDecodedEthBlock("test_data/eth-block-header-rlp-999999", t) - - size, err := ethBlock.Size() - if size != 0 { - t.Fatalf("Wrong size\r\nexpected %d\r\ngot %d", 0, size) - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -/* - AUXILIARS -*/ - -// checkError makes 3 lines into 1. -func checkError(err error, t *testing.T) { - if err != nil { - _, fn, line, _ := runtime.Caller(1) - t.Fatalf("[%v:%v] %v", fn, line, err) - } -} - -// parseFloat is a convenience function to test json output -func parseFloat(v interface{}) string { - return strconv.FormatFloat(v.(float64), 'f', 0, 64) -} - -// parseMapElement is a convenience function to tets json output -func parseMapElement(v interface{}) string { - return v.(map[string]interface{})["/"].(string) -} - -// prepareStoredEthBlock reads the block from a file source to get its rawdata -// and computes its cid, for then, feeding it into a new IPLD block function. -// So we can pretend that we got this block from the datastore -func prepareStoredEthBlock(filepath string, t *testing.T) *block.BasicBlock { - // Prepare the "fetched block". This one is supposed to be in the datastore - // and given away by github.com/ipfs/go-ipfs/merkledag - fi, err := os.Open(filepath) - checkError(err, t) - - b, err := ioutil.ReadAll(fi) - checkError(err, t) - - c, err := RawdataToCid(MEthHeader, b, multihash.KECCAK_256) - checkError(err, t) - - // It's good to clarify that this one below is an IPLD block - storedEthBlock, err := block.NewBlockWithCid(b, c) - checkError(err, t) - - return storedEthBlock -} - -// prepareDecodedEthBlock is more complex than function above, as it stores a -// basic block and RLP-decodes it -func prepareDecodedEthBlock(filepath string, t *testing.T) *EthHeader { - // Get the block from the datastore and decode it. - storedEthBlock := prepareStoredEthBlock("test_data/eth-block-header-rlp-999999", t) - ethBlock, err := DecodeEthHeader(storedEthBlock.Cid(), storedEthBlock.RawData()) - checkError(err, t) - - return ethBlock -} - -// testEthBlockFields checks the fields of EthBlock one by one. -func testEthBlockFields(ethBlock *EthHeader, t *testing.T) { - // Was the cid calculated? - if ethBlock.Cid().String() != "bagiacgzawt5236hkiuvrhfyy4jya3qitlt6icfcqgheew6vsptlraokppm4a" { - t.Fatalf("Wrong cid\r\nexpected %s\r\ngot %s", "bagiacgzawt5236hkiuvrhfyy4jya3qitlt6icfcqgheew6vsptlraokppm4a", ethBlock.Cid().String()) - } - - // Do we have the rawdata available? - if fmt.Sprintf("%x", ethBlock.RawData()[:10]) != "f90218a0d33c9dde9fff" { - t.Fatalf("Wrong Rawdata\r\nexpected %s\r\ngot %s", "f90218a0d33c9dde9fff", fmt.Sprintf("%x", ethBlock.RawData()[:10])) - } - - // Proper Fields of types.Header - if fmt.Sprintf("%x", ethBlock.ParentHash) != "d33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4" { - t.Fatalf("Wrong ParentHash\r\nexpected %s\r\ngot %s", "d33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4", fmt.Sprintf("%x", ethBlock.ParentHash)) - } - if fmt.Sprintf("%x", ethBlock.UncleHash) != "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" { - t.Fatalf("Wrong UncleHash field\r\nexpected %s\r\ngot %s", "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", fmt.Sprintf("%x", ethBlock.UncleHash)) - } - if fmt.Sprintf("%x", ethBlock.Coinbase) != "52bc44d5378309ee2abf1539bf71de1b7d7be3b5" { - t.Fatalf("Wrong Coinbase\r\nexpected %s\r\ngot %s", "52bc44d5378309ee2abf1539bf71de1b7d7be3b5", fmt.Sprintf("%x", ethBlock.Coinbase)) - } - if fmt.Sprintf("%x", ethBlock.Root) != "ed98aa4b5b19c82fb35364f08508ae0a6dec665fa57663dca94c5d70554cde10" { - t.Fatalf("Wrong Root\r\nexpected %s\r\ngot %s", "ed98aa4b5b19c82fb35364f08508ae0a6dec665fa57663dca94c5d70554cde10", fmt.Sprintf("%x", ethBlock.Root)) - } - if fmt.Sprintf("%x", ethBlock.TxHash) != "447cbd8c48f498a6912b10831cdff59c7fbfcbbe735ca92883d4fa06dcd7ae54" { - t.Fatalf("Wrong TxHash\r\nexpected %s\r\ngot %s", "447cbd8c48f498a6912b10831cdff59c7fbfcbbe735ca92883d4fa06dcd7ae54", fmt.Sprintf("%x", ethBlock.TxHash)) - } - if fmt.Sprintf("%x", ethBlock.ReceiptHash) != "7fa0f6ca2a01823208d80801edad37e3e3a003b55c89319b45eb1f97862ad229" { - t.Fatalf("Wrong ReceiptHash\r\nexpected %s\r\ngot %s", "7fa0f6ca2a01823208d80801edad37e3e3a003b55c89319b45eb1f97862ad229", fmt.Sprintf("%x", ethBlock.ReceiptHash)) - } - if len(ethBlock.Bloom) != 256 { - t.Fatalf("Wrong Bloom Length\r\nexpected %d\r\ngot %d", 256, len(ethBlock.Bloom)) - } - if fmt.Sprintf("%x", ethBlock.Bloom[71:76]) != "0000000000" { // You wouldn't want me to print out the whole bloom field? - t.Fatalf("Wrong Bloom\r\nexpected %s\r\ngot %s", "0000000000", fmt.Sprintf("%x", ethBlock.Bloom[71:76])) - } - if ethBlock.Difficulty.String() != "12555463106190" { - t.Fatalf("Wrong Difficulty\r\nexpected %s\r\ngot %s", "12555463106190", ethBlock.Difficulty.String()) - } - if ethBlock.Number.String() != "999999" { - t.Fatalf("Wrong Block Number\r\nexpected %s\r\ngot %s", "999999", ethBlock.Number.String()) - } - if ethBlock.GasLimit != uint64(3141592) { - t.Fatalf("Wrong Gas Limit\r\nexpected %d\r\ngot %d", 3141592, ethBlock.GasLimit) - } - if ethBlock.GasUsed != uint64(231000) { - t.Fatalf("Wrong Gas Used\r\nexpected %d\r\ngot %d", 231000, ethBlock.GasUsed) - } - if ethBlock.Time != uint64(1455404037) { - t.Fatalf("Wrong Time\r\nexpected %d\r\ngot %d", 1455404037, ethBlock.Time) - } - if fmt.Sprintf("%x", ethBlock.Extra) != "d783010303844765746887676f312e342e32856c696e7578" { - t.Fatalf("Wrong Extra\r\nexpected %s\r\ngot %s", "d783010303844765746887676f312e342e32856c696e7578", fmt.Sprintf("%x", ethBlock.Extra)) - } - if fmt.Sprintf("%x", ethBlock.Nonce) != "f491f46b60fe04b3" { - t.Fatalf("Wrong Nonce\r\nexpected %s\r\ngot %s", "f491f46b60fe04b3", fmt.Sprintf("%x", ethBlock.Nonce)) - } - if fmt.Sprintf("%x", ethBlock.MixDigest) != "5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0" { - t.Fatalf("Wrong MixDigest\r\nexpected %s\r\ngot %s", "5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0", fmt.Sprintf("%x", ethBlock.MixDigest)) - } -} diff --git a/statediff/indexer/ipld/eth_log.go b/statediff/indexer/ipld/eth_log.go index 225c44117..f42762585 100644 --- a/statediff/indexer/ipld/eth_log.go +++ b/statediff/indexer/ipld/eth_log.go @@ -1,10 +1,7 @@ package ipld import ( - "fmt" - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" mh "github.com/multiformats/go-multihash" "github.com/ethereum/go-ethereum/core/types" @@ -13,14 +10,12 @@ import ( // EthLog (eth-log, codec 0x9a), represents an ethereum block header type EthLog struct { - *types.Log - rawData []byte cid cid.Cid } // Static (compile time) check that EthLog satisfies the node.Node interface. -var _ node.Node = (*EthLog)(nil) +var _ IPLD = (*EthLog)(nil) // NewLog create a new EthLog IPLD node func NewLog(log *types.Log) (*EthLog, error) { @@ -33,29 +28,11 @@ func NewLog(log *types.Log) (*EthLog, error) { return nil, err } return &EthLog{ - Log: log, cid: c, rawData: logRaw, }, nil } -// DecodeEthLogs takes a cid and its raw binary data -func DecodeEthLogs(c cid.Cid, b []byte) (*EthLog, error) { - l := new(types.Log) - if err := rlp.DecodeBytes(b, l); err != nil { - return nil, err - } - return &EthLog{ - Log: l, - cid: c, - rawData: b, - }, nil -} - -/* - Block INTERFACE -*/ - // RawData returns the binary of the RLP encode of the log. func (l *EthLog) RawData() []byte { return l.rawData @@ -65,94 +42,3 @@ func (l *EthLog) RawData() []byte { func (l *EthLog) Cid() cid.Cid { return l.cid } - -// String is a helper for output -func (l *EthLog) String() string { - return fmt.Sprintf("", l.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (l *EthLog) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-log", - } -} - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (l *EthLog) Resolve(p []string) (interface{}, []string, error) { - if len(p) == 0 { - return l, nil, nil - } - - if len(p) > 1 { - return nil, nil, fmt.Errorf("unexpected path elements past %s", p[0]) - } - - switch p[0] { - case "address": - return l.Address, nil, nil - case "data": - // This is a []byte. By default they are marshalled into Base64. - return fmt.Sprintf("0x%x", l.Data), nil, nil - case "topics": - return l.Topics, nil, nil - case "logIndex": - return l.Index, nil, nil - case "removed": - return l.Removed, nil, nil - default: - return nil, nil, ErrInvalidLink - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (l *EthLog) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - - return []string{ - "address", - "data", - "topics", - "logIndex", - "removed", - } -} - -// ResolveLink is a helper function that calls resolve and asserts the -// output is a link -func (l *EthLog) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := l.Resolve(p) - if err != nil { - return nil, nil, err - } - - if lnk, ok := obj.(*node.Link); ok { - return lnk, rest, nil - } - - return nil, nil, fmt.Errorf("resolved item was not a link") -} - -// Copy will go away. It is here to comply with the Node interface. -func (l *EthLog) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -func (l *EthLog) Links() []*node.Link { - return nil -} - -// Stat will go away. It is here to comply with the interface. -func (l *EthLog) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the interface. -func (l *EthLog) Size() (uint64, error) { - return 0, nil -} diff --git a/statediff/indexer/ipld/eth_log_trie.go b/statediff/indexer/ipld/eth_log_trie.go deleted file mode 100644 index 32991734a..000000000 --- a/statediff/indexer/ipld/eth_log_trie.go +++ /dev/null @@ -1,144 +0,0 @@ -package ipld - -import ( - "fmt" - - node "github.com/ipfs/go-ipld-format" - - "github.com/ipfs/go-cid" - "github.com/multiformats/go-multihash" - - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" -) - -// EthLogTrie (eth-tx-trie codec 0x9p) represents -// a node from the transaction trie in ethereum. -type EthLogTrie struct { - *TrieNode -} - -/* - OUTPUT -*/ - -// DecodeEthLogTrie returns an EthLogTrie object from its cid and rawdata. -func DecodeEthLogTrie(c cid.Cid, b []byte) (*EthLogTrie, error) { - tn, err := decodeTrieNode(c, b, decodeEthLogTrieLeaf) - if err != nil { - return nil, err - } - return &EthLogTrie{TrieNode: tn}, nil -} - -// decodeEthLogTrieLeaf parses a eth-log-trie leaf -// from decoded RLP elements -func decodeEthLogTrieLeaf(i []interface{}) ([]interface{}, error) { - l := new(types.Log) - if err := rlp.DecodeBytes(i[1].([]byte), l); err != nil { - return nil, err - } - c, err := RawdataToCid(MEthLogTrie, i[1].([]byte), multihash.KECCAK_256) - if err != nil { - return nil, err - } - - return []interface{}{ - i[0].([]byte), - &EthLog{ - Log: l, - cid: c, - rawData: i[1].([]byte), - }, - }, nil -} - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the transaction. -func (t *EthLogTrie) RawData() []byte { - return t.rawdata -} - -// Cid returns the cid of the transaction. -func (t *EthLogTrie) Cid() cid.Cid { - return t.cid -} - -// String is a helper for output -func (t *EthLogTrie) String() string { - return fmt.Sprintf("", t.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (t *EthLogTrie) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-log-trie", - } -} - -// logTrie wraps a localTrie for use on the receipt trie. -type logTrie struct { - *localTrie -} - -// newLogTrie initializes and returns a logTrie. -func newLogTrie() *logTrie { - return &logTrie{ - localTrie: newLocalTrie(), - } -} - -// getNodes invokes the localTrie, which computes the root hash of the -// log trie and returns its sql keys, to return a slice -// of EthLogTrie nodes. -func (rt *logTrie) getNodes() ([]node.Node, error) { - keys, err := rt.getKeys() - if err != nil { - return nil, err - } - - out := make([]node.Node, 0, len(keys)) - for _, k := range keys { - n, err := rt.getNodeFromDB(k) - if err != nil { - return nil, err - } - out = append(out, n) - } - - return out, nil -} - -func (rt *logTrie) getNodeFromDB(key []byte) (*EthLogTrie, error) { - rawdata, err := rt.db.Get(key) - if err != nil { - return nil, err - } - tn := &TrieNode{ - cid: Keccak256ToCid(MEthLogTrie, key), - rawdata: rawdata, - } - return &EthLogTrie{TrieNode: tn}, nil -} - -// getLeafNodes invokes the localTrie, which returns a slice -// of EthLogTrie leaf nodes. -func (rt *logTrie) getLeafNodes() ([]*EthLogTrie, []*nodeKey, error) { - keys, err := rt.getLeafKeys() - if err != nil { - return nil, nil, err - } - out := make([]*EthLogTrie, 0, len(keys)) - for _, k := range keys { - n, err := rt.getNodeFromDB(k.dbKey) - if err != nil { - return nil, nil, err - } - out = append(out, n) - } - - return out, keys, nil -} diff --git a/statediff/indexer/ipld/eth_parser.go b/statediff/indexer/ipld/eth_parser.go index e6137da4e..9ce71553d 100644 --- a/statediff/indexer/ipld/eth_parser.go +++ b/statediff/indexer/ipld/eth_parser.go @@ -17,106 +17,9 @@ package ipld import ( - "bytes" - "encoding/json" - "io" - "io/ioutil" - - "github.com/multiformats/go-multihash" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/rlp" ) -// FromBlockRLP takes an RLP message representing -// an ethereum block header or body (header, ommers and txs) -// to return it as a set of IPLD nodes for further processing. -func FromBlockRLP(r io.Reader) (*EthHeader, []*EthTx, error) { - // We may want to use this stream several times - rawdata, err := ioutil.ReadAll(r) - if err != nil { - return nil, nil, err - } - - // Let's try to decode the received element as a block body - var decodedBlock types.Block - err = rlp.Decode(bytes.NewBuffer(rawdata), &decodedBlock) - if err != nil { - if err.Error()[:41] != "rlp: expected input list for types.Header" { - return nil, nil, err - } - - // Maybe it is just a header... (body sans ommers and txs) - var decodedHeader types.Header - err := rlp.Decode(bytes.NewBuffer(rawdata), &decodedHeader) - if err != nil { - return nil, nil, err - } - - c, err := RawdataToCid(MEthHeader, rawdata, multihash.KECCAK_256) - if err != nil { - return nil, nil, err - } - // It was a header - return &EthHeader{ - Header: &decodedHeader, - cid: c, - rawdata: rawdata, - }, nil, nil - } - - // This is a block body (header + ommers + txs) - // We'll extract the header bits here - headerRawData := getRLP(decodedBlock.Header()) - c, err := RawdataToCid(MEthHeader, headerRawData, multihash.KECCAK_256) - if err != nil { - return nil, nil, err - } - ethBlock := &EthHeader{ - Header: decodedBlock.Header(), - cid: c, - rawdata: headerRawData, - } - - // Process the found eth-tx objects - ethTxNodes, err := processTransactions(decodedBlock.Transactions()) - if err != nil { - return nil, nil, err - } - - return ethBlock, ethTxNodes, nil -} - -// FromBlockJSON takes the output of an ethereum client JSON API -// (i.e. parity or geth) and returns a set of IPLD nodes. -func FromBlockJSON(r io.Reader) (*EthHeader, []*EthTx, error) { - var obj objJSONHeader - dec := json.NewDecoder(r) - err := dec.Decode(&obj) - if err != nil { - return nil, nil, err - } - - headerRawData := getRLP(&obj.Result.Header) - c, err := RawdataToCid(MEthHeader, headerRawData, multihash.KECCAK_256) - if err != nil { - return nil, nil, err - } - ethBlock := &EthHeader{ - Header: &obj.Result.Header, - cid: c, - rawdata: headerRawData, - } - - // Process the found eth-tx objects - ethTxNodes, err := processTransactions(obj.Result.Transactions) - if err != nil { - return nil, nil, err - } - - return ethBlock, ethTxNodes, nil -} - // FromBlockAndReceipts takes a block and processes it // to return it a set of IPLD nodes for further processing. func FromBlockAndReceipts(block *types.Block, receipts []*types.Receipt) (*EthHeader, []*EthTx, []*EthReceipt, [][]*EthLog, error) { @@ -133,7 +36,7 @@ func FromBlockAndReceipts(block *types.Block, receipts []*types.Receipt) (*EthHe } // Process the receipts and logs - rctNodes, logNodes, err := processReceiptsAndLogs(receipts, block.Header().ReceiptHash[:]) + rctNodes, logNodes, err := processReceiptsAndLogs(receipts) return headerNode, txNodes, rctNodes, logNodes, err } @@ -155,7 +58,7 @@ func processTransactions(txs []*types.Transaction) ([]*EthTx, error) { // processReceiptsAndLogs will take in receipts // to return IPLD node slices for eth-rct and eth-log -func processReceiptsAndLogs(rcts []*types.Receipt, expectedRctRoot []byte) ([]*EthReceipt, [][]*EthLog, error) { +func processReceiptsAndLogs(rcts []*types.Receipt) ([]*EthReceipt, [][]*EthLog, error) { // Pre allocating memory. ethRctNodes := make([]*EthReceipt, len(rcts)) ethLogNodes := make([][]*EthLog, len(rcts)) diff --git a/statediff/indexer/ipld/eth_receipt.go b/statediff/indexer/ipld/eth_receipt.go index ccd785515..eac2ba6b6 100644 --- a/statediff/indexer/ipld/eth_receipt.go +++ b/statediff/indexer/ipld/eth_receipt.go @@ -17,30 +17,19 @@ package ipld import ( - "encoding/json" - "fmt" - "strconv" - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" mh "github.com/multiformats/go-multihash" "github.com/ethereum/go-ethereum/core/types" ) type EthReceipt struct { - *types.Receipt - rawdata []byte cid cid.Cid } // Static (compile time) check that EthReceipt satisfies the node.Node interface. -var _ node.Node = (*EthReceipt)(nil) - -/* - INPUT -*/ +var _ IPLD = (*EthReceipt)(nil) // NewReceipt converts a types.ReceiptForStorage to an EthReceipt IPLD node func NewReceipt(receipt *types.Receipt) (*EthReceipt, error) { @@ -53,34 +42,11 @@ func NewReceipt(receipt *types.Receipt) (*EthReceipt, error) { return nil, err } return &EthReceipt{ - Receipt: receipt, cid: c, rawdata: rctRaw, }, nil } -/* - OUTPUT -*/ - -// DecodeEthReceipt takes a cid and its raw binary data -// from IPFS and returns an EthTx object for further processing. -func DecodeEthReceipt(c cid.Cid, b []byte) (*EthReceipt, error) { - r := new(types.Receipt) - if err := r.UnmarshalBinary(b); err != nil { - return nil, err - } - return &EthReceipt{ - Receipt: r, - cid: c, - rawdata: b, - }, nil -} - -/* - Block INTERFACE -*/ - // RawData returns the binary of the RLP encode of the receipt. func (r *EthReceipt) RawData() []byte { return r.rawdata @@ -90,116 +56,3 @@ func (r *EthReceipt) RawData() []byte { func (r *EthReceipt) Cid() cid.Cid { return r.cid } - -// String is a helper for output -func (r *EthReceipt) String() string { - return fmt.Sprintf("", r.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (r *EthReceipt) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-receipt", - } -} - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (r *EthReceipt) Resolve(p []string) (interface{}, []string, error) { - if len(p) == 0 { - return r, nil, nil - } - - first, rest := p[0], p[1:] - if first != "logs" && len(p) != 1 { - return nil, nil, fmt.Errorf("unexpected path elements past %s", first) - } - - switch first { - case "logs": - return &node.Link{Cid: commonHashToCid(MEthLog, r.LogRoot)}, rest, nil - case "root": - return r.PostState, nil, nil - case "status": - return r.Status, nil, nil - case "cumulativeGasUsed": - return r.CumulativeGasUsed, nil, nil - case "logsBloom": - return r.Bloom, nil, nil - case "transactionHash": - return r.TxHash, nil, nil - case "contractAddress": - return r.ContractAddress, nil, nil - case "gasUsed": - return r.GasUsed, nil, nil - case "type": - return r.Type, nil, nil - default: - return nil, nil, ErrInvalidLink - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (r *EthReceipt) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - return []string{"type", "root", "status", "cumulativeGasUsed", "logsBloom", "logs", "transactionHash", "contractAddress", "gasUsed"} -} - -// ResolveLink is a helper function that calls resolve and asserts the -// output is a link -func (r *EthReceipt) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := r.Resolve(p) - if err != nil { - return nil, nil, err - } - - if lnk, ok := obj.(*node.Link); ok { - return lnk, rest, nil - } - - return nil, nil, fmt.Errorf("resolved item was not a link") -} - -// Copy will go away. It is here to comply with the Node interface. -func (r *EthReceipt) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -func (r *EthReceipt) Links() []*node.Link { - return []*node.Link{ - {Cid: commonHashToCid(MEthLog, r.LogRoot)}, - } -} - -// Stat will go away. It is here to comply with the interface. -func (r *EthReceipt) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the interface. -func (r *EthReceipt) Size() (uint64, error) { - return strconv.ParseUint(r.Receipt.Size().String(), 10, 64) -} - -/* - EthReceipt functions -*/ - -// MarshalJSON processes the receipt into readable JSON format. -func (r *EthReceipt) MarshalJSON() ([]byte, error) { - out := map[string]interface{}{ - "root": r.PostState, - "status": r.Status, - "cumulativeGasUsed": r.CumulativeGasUsed, - "logsBloom": r.Bloom, - "logs": r.Logs, - "transactionHash": r.TxHash, - "contractAddress": r.ContractAddress, - "gasUsed": r.GasUsed, - } - return json.Marshal(out) -} diff --git a/statediff/indexer/ipld/eth_receipt_trie.go b/statediff/indexer/ipld/eth_receipt_trie.go deleted file mode 100644 index a9e774e3f..000000000 --- a/statediff/indexer/ipld/eth_receipt_trie.go +++ /dev/null @@ -1,175 +0,0 @@ -// VulcanizeDB -// Copyright © 2019 Vulcanize - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package ipld - -import ( - "fmt" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" - - "github.com/ethereum/go-ethereum/core/types" -) - -// EthRctTrie (eth-tx-trie codec 0x92) represents -// a node from the transaction trie in ethereum. -type EthRctTrie struct { - *TrieNode -} - -// Static (compile time) check that EthRctTrie satisfies the node.Node interface. -var _ node.Node = (*EthRctTrie)(nil) - -/* - INPUT -*/ - -// To create a proper trie of the eth-tx-trie objects, it is required -// to input all transactions belonging to a forest in a single step. -// We are adding the transactions, and creating its trie on -// block body parsing time. - -/* - OUTPUT -*/ - -// DecodeEthRctTrie returns an EthRctTrie object from its cid and rawdata. -func DecodeEthRctTrie(c cid.Cid, b []byte) (*EthRctTrie, error) { - tn, err := decodeTrieNode(c, b, decodeEthRctTrieLeaf) - if err != nil { - return nil, err - } - return &EthRctTrie{TrieNode: tn}, nil -} - -// decodeEthRctTrieLeaf parses a eth-rct-trie leaf -//from decoded RLP elements -func decodeEthRctTrieLeaf(i []interface{}) ([]interface{}, error) { - r := new(types.Receipt) - if err := r.UnmarshalBinary(i[1].([]byte)); err != nil { - return nil, err - } - c, err := RawdataToCid(MEthTxReceipt, i[1].([]byte), multihash.KECCAK_256) - if err != nil { - return nil, err - } - return []interface{}{ - i[0].([]byte), - &EthReceipt{ - Receipt: r, - cid: c, - rawdata: i[1].([]byte), - }, - }, nil -} - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the transaction. -func (t *EthRctTrie) RawData() []byte { - return t.rawdata -} - -// Cid returns the cid of the transaction. -func (t *EthRctTrie) Cid() cid.Cid { - return t.cid -} - -// String is a helper for output -func (t *EthRctTrie) String() string { - return fmt.Sprintf("", t.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (t *EthRctTrie) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-rct-trie", - } -} - -/* - EthRctTrie functions -*/ - -// rctTrie wraps a localTrie for use on the receipt trie. -type rctTrie struct { - *localTrie -} - -// NewRctTrie initializes and returns a rctTrie. -func NewRctTrie() *rctTrie { - return &rctTrie{ - localTrie: newLocalTrie(), - } -} - -// GetNodes invokes the localTrie, which computes the root hash of the -// transaction trie and returns its sql keys, to return a slice -// of EthRctTrie nodes. -func (rt *rctTrie) GetNodes() ([]*EthRctTrie, error) { - keys, err := rt.getKeys() - if err != nil { - return nil, err - } - var out []*EthRctTrie - - for _, k := range keys { - n, err := rt.getNodeFromDB(k) - if err != nil { - return nil, err - } - out = append(out, n) - } - - return out, nil -} - -// GetLeafNodes invokes the localTrie, which returns a slice -// of EthRctTrie leaf nodes. -func (rt *rctTrie) GetLeafNodes() ([]*EthRctTrie, []*nodeKey, error) { - keys, err := rt.getLeafKeys() - if err != nil { - return nil, nil, err - } - - out := make([]*EthRctTrie, 0, len(keys)) - for _, k := range keys { - n, err := rt.getNodeFromDB(k.dbKey) - if err != nil { - return nil, nil, err - } - out = append(out, n) - } - - return out, keys, nil -} - -func (rt *rctTrie) getNodeFromDB(key []byte) (*EthRctTrie, error) { - rawdata, err := rt.db.Get(key) - if err != nil { - return nil, err - } - tn := &TrieNode{ - cid: Keccak256ToCid(MEthTxReceiptTrie, key), - rawdata: rawdata, - } - - return &EthRctTrie{TrieNode: tn}, nil -} diff --git a/statediff/indexer/ipld/eth_state.go b/statediff/indexer/ipld/eth_state.go deleted file mode 100644 index fe525d3aa..000000000 --- a/statediff/indexer/ipld/eth_state.go +++ /dev/null @@ -1,130 +0,0 @@ -// VulcanizeDB -// Copyright © 2019 Vulcanize - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package ipld - -import ( - "fmt" - "io" - "io/ioutil" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" - - "github.com/ethereum/go-ethereum/rlp" -) - -// EthStateTrie (eth-state-trie, codec 0x96), represents -// a node from the satte trie in ethereum. -type EthStateTrie struct { - *TrieNode -} - -// Static (compile time) check that EthStateTrie satisfies the node.Node interface. -var _ node.Node = (*EthStateTrie)(nil) - -/* - INPUT -*/ - -// FromStateTrieRLPFile takes the RLP representation of an ethereum -// state trie node to return it as an IPLD node for further processing. -func FromStateTrieRLPFile(r io.Reader) (*EthStateTrie, error) { - raw, err := ioutil.ReadAll(r) - if err != nil { - return nil, err - } - return FromStateTrieRLP(raw) -} - -// FromStateTrieRLP takes the RLP representation of an ethereum -// state trie node to return it as an IPLD node for further processing. -func FromStateTrieRLP(raw []byte) (*EthStateTrie, error) { - c, err := RawdataToCid(MEthStateTrie, raw, multihash.KECCAK_256) - if err != nil { - return nil, err - } - // Let's run the whole mile and process the nodeKind and - // its elements, in case somebody would need this function - // to parse an RLP element from the filesystem - return DecodeEthStateTrie(c, raw) -} - -func FromStateTrieRLPAndHash(raw, hash []byte) (*EthStateTrie, error) { - c, err := Keccak256ToCid(MEthStateTrie, hash) -} - -/* - OUTPUT -*/ - -// DecodeEthStateTrie returns an EthStateTrie object from its cid and rawdata. -func DecodeEthStateTrie(c cid.Cid, b []byte) (*EthStateTrie, error) { - tn, err := decodeTrieNode(c, b, decodeEthStateTrieLeaf) - if err != nil { - return nil, err - } - return &EthStateTrie{TrieNode: tn}, nil -} - -// decodeEthStateTrieLeaf parses a eth-tx-trie leaf -// from decoded RLP elements -func decodeEthStateTrieLeaf(i []interface{}) ([]interface{}, error) { - var account EthAccount - err := rlp.DecodeBytes(i[1].([]byte), &account) - if err != nil { - return nil, err - } - c, err := RawdataToCid(MEthAccountSnapshot, i[1].([]byte), multihash.KECCAK_256) - if err != nil { - return nil, err - } - return []interface{}{ - i[0].([]byte), - &EthAccountSnapshot{ - EthAccount: &account, - cid: c, - rawdata: i[1].([]byte), - }, - }, nil -} - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the state trie node. -func (st *EthStateTrie) RawData() []byte { - return st.rawdata -} - -// Cid returns the cid of the state trie node. -func (st *EthStateTrie) Cid() cid.Cid { - return st.cid -} - -// String is a helper for output -func (st *EthStateTrie) String() string { - return fmt.Sprintf("", st.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (st *EthStateTrie) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-state-trie", - } -} diff --git a/statediff/indexer/ipld/eth_state_test.go b/statediff/indexer/ipld/eth_state_test.go deleted file mode 100644 index 20ff77670..000000000 --- a/statediff/indexer/ipld/eth_state_test.go +++ /dev/null @@ -1,326 +0,0 @@ -package ipld - -import ( - "fmt" - "os" - "testing" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" -) - -/* - INPUT - OUTPUT -*/ - -func TestStateTrieNodeEvenExtensionParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-eb2f5f") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "extension" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "extension", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - if fmt.Sprintf("%x", output.elements[0]) != "0d08" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "0d08", fmt.Sprintf("%x", output.elements[0])) - } - - if output.elements[1].(cid.Cid).String() != - "baglacgzalnzmhhnxudxtga6t3do2rctb6ycgyj6mjnycoamlnc733nnbkd6q" { - t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", "baglacgzalnzmhhnxudxtga6t3do2rctb6ycgyj6mjnycoamlnc733nnbkd6q", output.elements[1].(cid.Cid).String()) - } -} - -func TestStateTrieNodeOddExtensionParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-56864f") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "extension" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "extension", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - if fmt.Sprintf("%x", output.elements[0]) != "02" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "02", fmt.Sprintf("%x", output.elements[0])) - } - - if output.elements[1].(cid.Cid).String() != - "baglacgzaizf2czb7wztoox4lu23qkwkbfamqsdzcmejzr3rsszrvkaktpfeq" { - t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", "baglacgzaizf2czb7wztoox4lu23qkwkbfamqsdzcmejzr3rsszrvkaktpfeq", output.elements[1].(cid.Cid).String()) - } -} - -func TestStateTrieNodeEvenLeafParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-0e8b34") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "leaf" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "leaf", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - // bd66f60e5b954e1af93ded1b02cb575ff0ed6d9241797eff7576b0bf0637 - if fmt.Sprintf("%x", output.elements[0].([]byte)[0:10]) != "0b0d06060f06000e050b" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "0b0d06060f06000e050b", fmt.Sprintf("%x", output.elements[0].([]byte)[0:10])) - } - - if output.elements[1].(*EthAccountSnapshot).String() != - "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", output.elements[1].(*EthAccountSnapshot).String()) - } -} - -func TestStateTrieNodeOddLeafParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-c9070d") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "leaf" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "leaf", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - // 6c9db9bb545a03425e300f3ee72bae098110336dd3eaf48c20a2e5b6865fc - if fmt.Sprintf("%x", output.elements[0].([]byte)[0:10]) != "060c090d0b090b0b0504" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "060c090d0b090b0b0504", fmt.Sprintf("%x", output.elements[0].([]byte)[0:10])) - } - - if output.elements[1].(*EthAccountSnapshot).String() != - "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", output.elements[1].(*EthAccountSnapshot).String()) - } -} - -/* - Block INTERFACE -*/ -func TestStateTrieBlockElements(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-d7f897") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if fmt.Sprintf("%x", output.RawData())[:10] != "f90211a090" { - t.Fatalf("Wrong Data\r\nexpected %s\r\ngot %s", "f90211a090", fmt.Sprintf("%x", output.RawData())[:10]) - } - - if output.Cid().String() != - "baglacgza274jot5vvr4ntlajtonnkaml5xbm4cts3liye6qxbhndawapavca" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "baglacgza274jot5vvr4ntlajtonnkaml5xbm4cts3liye6qxbhndawapavca", output.Cid().String()) - } -} - -func TestStateTrieString(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-d7f897") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.String() != - "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", output.String()) - } -} - -func TestStateTrieLoggable(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-d7f897") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - l := output.Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-state-trie" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-state-trie", l["type"]) - } -} - -/* - TRIE NODE (Through EthStateTrie) - Node INTERFACE -*/ - -func TestTraverseStateTrieWithResolve(t *testing.T) { - var err error - - stMap := prepareStateTrieMap(t) - - // This is the cid of the root of the block 0 - // baglacgza274jot5vvr4ntlajtonnkaml5xbm4cts3liye6qxbhndawapavca - currentNode := stMap["baglacgza274jot5vvr4ntlajtonnkaml5xbm4cts3liye6qxbhndawapavca"] - - // This is the path we want to traverse - // The eth address is 0x5abfec25f74cd88437631a7731906932776356f9 - // Its keccak-256 is cdd3e25edec0a536a05f5e5ab90a5603624c0ed77453b2e8f955cf8b43d4d0fb - // We use the keccak-256(addr) to traverse the state trie in ethereum. - var traversePath []string - for _, s := range "cdd3e25edec0a536a05f5e5ab90a5603624c0ed77453b2e8f955cf8b43d4d0fb" { - traversePath = append(traversePath, string(s)) - } - traversePath = append(traversePath, "balance") - - var obj interface{} - for { - obj, traversePath, err = currentNode.Resolve(traversePath) - link, ok := obj.(*node.Link) - if !ok { - break - } - if err != nil { - t.Fatal("Error should be nil") - } - - currentNode = stMap[link.Cid.String()] - if currentNode == nil { - t.Fatal("state trie node not found in memory map") - } - } - - if fmt.Sprintf("%v", obj) != "11901484239480000000000000" { - t.Fatalf("Wrong balance value\r\nexpected %s\r\ngot %s", "11901484239480000000000000", fmt.Sprintf("%v", obj)) - } -} - -func TestStateTrieResolveLinks(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-eb2f5f") - checkError(err, t) - - stNode, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - // bad case - obj, rest, err := stNode.ResolveLink([]string{"supercalifragilist"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err.Error() != "invalid path element" { - t.Fatalf("Wrong error\r\nexpected %s\r\ngot %s", "invalid path element", err.Error()) - } - - // good case - obj, rest, err = stNode.ResolveLink([]string{"d8"}) - if obj == nil { - t.Fatalf("Expected a not nil obj to be returned") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err != nil { - t.Fatal("Expected error to be nil") - } -} - -func TestStateTrieCopy(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-eb2f5f") - checkError(err, t) - - stNode, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - defer func() { - r := recover() - if r == nil { - t.Fatal("Expected panic") - } - if r != "implement me" { - t.Fatalf("Wrong panic message\r\nexpected %s\r\ngot %s", "'implement me'", r) - } - }() - - _ = stNode.Copy() -} - -func TestStateTrieStat(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-eb2f5f") - checkError(err, t) - - stNode, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - obj, err := stNode.Stat() - if obj == nil { - t.Fatal("Expected a not null object node.NodeStat") - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -func TestStateTrieSize(t *testing.T) { - fi, err := os.Open("test_data/eth-state-trie-rlp-eb2f5f") - checkError(err, t) - - stNode, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - size, err := stNode.Size() - if size != uint64(0) { - t.Fatalf("Wrong size\r\nexpected %d\r\ngot %d", 0, size) - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -func prepareStateTrieMap(t *testing.T) map[string]*EthStateTrie { - filepaths := []string{ - "test_data/eth-state-trie-rlp-0e8b34", - "test_data/eth-state-trie-rlp-56864f", - "test_data/eth-state-trie-rlp-6fc2d7", - "test_data/eth-state-trie-rlp-727994", - "test_data/eth-state-trie-rlp-c9070d", - "test_data/eth-state-trie-rlp-d5be90", - "test_data/eth-state-trie-rlp-d7f897", - "test_data/eth-state-trie-rlp-eb2f5f", - } - - out := make(map[string]*EthStateTrie) - - for _, fp := range filepaths { - fi, err := os.Open(fp) - checkError(err, t) - - stateTrieNode, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - out[stateTrieNode.Cid().String()] = stateTrieNode - } - - return out -} diff --git a/statediff/indexer/ipld/eth_storage.go b/statediff/indexer/ipld/eth_storage.go deleted file mode 100644 index 8b4d6234d..000000000 --- a/statediff/indexer/ipld/eth_storage.go +++ /dev/null @@ -1,112 +0,0 @@ -// VulcanizeDB -// Copyright © 2019 Vulcanize - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package ipld - -import ( - "fmt" - "io" - "io/ioutil" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" -) - -// EthStorageTrie (eth-storage-trie, codec 0x98), represents -// a node from the storage trie in ethereum. -type EthStorageTrie struct { - *TrieNode -} - -// Static (compile time) check that EthStorageTrie satisfies the node.Node interface. -var _ node.Node = (*EthStorageTrie)(nil) - -/* - INPUT -*/ - -// FromStorageTrieRLPFile takes the RLP representation of an ethereum -// storage trie node to return it as an IPLD node for further processing. -func FromStorageTrieRLPFile(r io.Reader) (*EthStorageTrie, error) { - raw, err := ioutil.ReadAll(r) - if err != nil { - return nil, err - } - return FromStorageTrieRLP(raw) -} - -// FromStorageTrieRLP takes the RLP representation of an ethereum -// storage trie node to return it as an IPLD node for further processing. -func FromStorageTrieRLP(raw []byte) (*EthStorageTrie, error) { - c, err := RawdataToCid(MEthStorageTrie, raw, multihash.KECCAK_256) - if err != nil { - return nil, err - } - - // Let's run the whole mile and process the nodeKind and - // its elements, in case somebody would need this function - // to parse an RLP element from the filesystem - return DecodeEthStorageTrie(c, raw) -} - -/* - OUTPUT -*/ - -// DecodeEthStorageTrie returns an EthStorageTrie object from its cid and rawdata. -func DecodeEthStorageTrie(c cid.Cid, b []byte) (*EthStorageTrie, error) { - tn, err := decodeTrieNode(c, b, decodeEthStorageTrieLeaf) - if err != nil { - return nil, err - } - return &EthStorageTrie{TrieNode: tn}, nil -} - -// decodeEthStorageTrieLeaf parses a eth-tx-trie leaf -// from decoded RLP elements -func decodeEthStorageTrieLeaf(i []interface{}) ([]interface{}, error) { - return []interface{}{ - i[0].([]byte), - i[1].([]byte), - }, nil -} - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the storage trie node. -func (st *EthStorageTrie) RawData() []byte { - return st.rawdata -} - -// Cid returns the cid of the storage trie node. -func (st *EthStorageTrie) Cid() cid.Cid { - return st.cid -} - -// String is a helper for output -func (st *EthStorageTrie) String() string { - return fmt.Sprintf("", st.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (st *EthStorageTrie) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-storage-trie", - } -} diff --git a/statediff/indexer/ipld/eth_storage_test.go b/statediff/indexer/ipld/eth_storage_test.go deleted file mode 100644 index ac4b38691..000000000 --- a/statediff/indexer/ipld/eth_storage_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package ipld - -import ( - "fmt" - "os" - "testing" - - "github.com/ipfs/go-cid" -) - -/* - INPUT - OUTPUT -*/ - -func TestStorageTrieNodeExtensionParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-113049") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "extension" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "extension", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - if fmt.Sprintf("%x", output.elements[0]) != "0a" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "0a", fmt.Sprintf("%x", output.elements[0])) - } - - if output.elements[1].(cid.Cid).String() != - "baglacgzautxeutufae7owyrezfvwpan2vusocmxgzwqhzrhjbwprp2texgsq" { - t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", "baglacgzautxeutufae7owyrezfvwpan2vusocmxgzwqhzrhjbwprp2texgsq", output.elements[1].(cid.Cid).String()) - } -} - -func TestStateTrieNodeLeafParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad") - checkError(err, t) - - output, err := FromStorageTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "leaf" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "leaf", output.nodeKind) - } - - if len(output.elements) != 2 { - t.Fatalf("Wrong number of elements for an leaf node\r\nexpected %d\r\ngot %d", 2, len(output.elements)) - } - - // 2ee1ae9c502e48e0ed528b7b39ac569cef69d7844b5606841a7f3fe898a2 - if fmt.Sprintf("%x", output.elements[0].([]byte)[:10]) != "020e0e010a0e090c0500" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "020e0e010a0e090c0500", fmt.Sprintf("%x", output.elements[0].([]byte)[:10])) - } - - if fmt.Sprintf("%x", output.elements[1]) != "89056c31f304b2530000" { - t.Fatalf("Wrong Value\r\nexpected %s\r\ngot %s", "89056c31f304b2530000", fmt.Sprintf("%x", output.elements[1])) - } -} - -func TestStateTrieNodeBranchParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-ffc25c") - checkError(err, t) - - output, err := FromStateTrieRLPFile(fi) - checkError(err, t) - - if output.nodeKind != "branch" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "branch", output.nodeKind) - } - - if len(output.elements) != 17 { - t.Fatalf("Wrong number of elements for an branch node\r\nexpected %d\r\ngot %d", 17, len(output.elements)) - } - - if fmt.Sprintf("%s", output.elements[4]) != - "baglacgzadqhbmlxrxtw5hplcq5jn74p4dceryzw664w3237ra52dnghbjpva" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "baglacgzadqhbmlxrxtw5hplcq5jn74p4dceryzw664w3237ra52dnghbjpva", fmt.Sprintf("%s", output.elements[4])) - } - - if fmt.Sprintf("%s", output.elements[10]) != - "baglacgza77d37i2v6uhtzeeq4vngragjbgbwq3lylpoc3lihenvzimybzxmq" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "baglacgza77d37i2v6uhtzeeq4vngragjbgbwq3lylpoc3lihenvzimybzxmq", fmt.Sprintf("%s", output.elements[10])) - } -} - -/* - Block INTERFACE -*/ -func TestStorageTrieBlockElements(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad") - checkError(err, t) - - output, err := FromStorageTrieRLPFile(fi) - checkError(err, t) - - if fmt.Sprintf("%x", output.RawData())[:10] != "eb9f202ee1" { - t.Fatalf("Wrong Data\r\nexpected %s\r\ngot %s", "eb9f202ee1", fmt.Sprintf("%x", output.RawData())[:10]) - } - - if output.Cid().String() != - "bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "bagmacgza766k3oprj2qxn36eycw55pogmu3dwtfay6zdh6ajrhvw3b2nqg5a", output.Cid().String()) - } -} - -func TestStorageTrieString(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad") - checkError(err, t) - - output, err := FromStorageTrieRLPFile(fi) - checkError(err, t) - - if output.String() != - "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", output.String()) - } -} - -func TestStorageTrieLoggable(t *testing.T) { - fi, err := os.Open("test_data/eth-storage-trie-rlp-ffbcad") - checkError(err, t) - - output, err := FromStorageTrieRLPFile(fi) - checkError(err, t) - - l := output.Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-storage-trie" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-storage-trie", l["type"]) - } -} diff --git a/statediff/indexer/ipld/eth_tx.go b/statediff/indexer/ipld/eth_tx.go index 99b1f9dbe..ca5fe65f6 100644 --- a/statediff/indexer/ipld/eth_tx.go +++ b/statediff/indexer/ipld/eth_tx.go @@ -17,33 +17,20 @@ package ipld import ( - "encoding/json" - "fmt" - "strconv" - "strings" - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" mh "github.com/multiformats/go-multihash" - "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/types" ) // EthTx (eth-tx codec 0x93) represents an ethereum transaction type EthTx struct { - *types.Transaction - cid cid.Cid rawdata []byte } // Static (compile time) check that EthTx satisfies the node.Node interface. -var _ node.Node = (*EthTx)(nil) - -/* - INPUT -*/ +var _ IPLD = (*EthTx)(nil) // NewEthTx converts a *types.Transaction to an EthTx IPLD node func NewEthTx(tx *types.Transaction) (*EthTx, error) { @@ -56,34 +43,11 @@ func NewEthTx(tx *types.Transaction) (*EthTx, error) { return nil, err } return &EthTx{ - Transaction: tx, - cid: c, - rawdata: txRaw, + cid: c, + rawdata: txRaw, }, nil } -/* - OUTPUT -*/ - -// DecodeEthTx takes a cid and its raw binary data -// from IPFS and returns an EthTx object for further processing. -func DecodeEthTx(c cid.Cid, b []byte) (*EthTx, error) { - t := new(types.Transaction) - if err := t.UnmarshalBinary(b); err != nil { - return nil, err - } - return &EthTx{ - Transaction: t, - cid: c, - rawdata: b, - }, nil -} - -/* - Block INTERFACE -*/ - // RawData returns the binary of the RLP encode of the transaction. func (t *EthTx) RawData() []byte { return t.rawdata @@ -93,146 +57,3 @@ func (t *EthTx) RawData() []byte { func (t *EthTx) Cid() cid.Cid { return t.cid } - -// String is a helper for output -func (t *EthTx) String() string { - return fmt.Sprintf("", t.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (t *EthTx) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-tx", - } -} - -/* - Node INTERFACE -*/ - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (t *EthTx) Resolve(p []string) (interface{}, []string, error) { - if len(p) == 0 { - return t, nil, nil - } - - if len(p) > 1 { - return nil, nil, fmt.Errorf("unexpected path elements past %s", p[0]) - } - - switch p[0] { - case "type": - return t.Type(), nil, nil - case "gas": - return t.Gas(), nil, nil - case "gasPrice": - return t.GasPrice(), nil, nil - case "input": - return fmt.Sprintf("%x", t.Data()), nil, nil - case "nonce": - return t.Nonce(), nil, nil - case "r": - _, r, _ := t.RawSignatureValues() - return hexutil.EncodeBig(r), nil, nil - case "s": - _, _, s := t.RawSignatureValues() - return hexutil.EncodeBig(s), nil, nil - case "toAddress": - return t.To(), nil, nil - case "v": - v, _, _ := t.RawSignatureValues() - return hexutil.EncodeBig(v), nil, nil - case "value": - return hexutil.EncodeBig(t.Value()), nil, nil - default: - return nil, nil, ErrInvalidLink - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (t *EthTx) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - return []string{"type", "gas", "gasPrice", "input", "nonce", "r", "s", "toAddress", "v", "value"} -} - -// ResolveLink is a helper function that calls resolve and asserts the -// output is a link -func (t *EthTx) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := t.Resolve(p) - if err != nil { - return nil, nil, err - } - - if lnk, ok := obj.(*node.Link); ok { - return lnk, rest, nil - } - - return nil, nil, fmt.Errorf("resolved item was not a link") -} - -// Copy will go away. It is here to comply with the interface. -func (t *EthTx) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -func (t *EthTx) Links() []*node.Link { - return nil -} - -// Stat will go away. It is here to comply with the interface. -func (t *EthTx) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the interface. It returns the byte size for the transaction -func (t *EthTx) Size() (uint64, error) { - spl := strings.Split(t.Transaction.Size().String(), " ") - size, units := spl[0], spl[1] - floatSize, err := strconv.ParseFloat(size, 64) - if err != nil { - return 0, err - } - var byteSize uint64 - switch units { - case "B": - byteSize = uint64(floatSize) - case "KB": - byteSize = uint64(floatSize * 1000) - case "MB": - byteSize = uint64(floatSize * 1000000) - case "GB": - byteSize = uint64(floatSize * 1000000000) - case "TB": - byteSize = uint64(floatSize * 1000000000000) - default: - return 0, fmt.Errorf("unreconginized units %s", units) - } - return byteSize, nil -} - -/* - EthTx functions -*/ - -// MarshalJSON processes the transaction into readable JSON format. -func (t *EthTx) MarshalJSON() ([]byte, error) { - v, r, s := t.RawSignatureValues() - - out := map[string]interface{}{ - "gas": t.Gas(), - "gasPrice": hexutil.EncodeBig(t.GasPrice()), - "input": fmt.Sprintf("%x", t.Data()), - "nonce": t.Nonce(), - "r": hexutil.EncodeBig(r), - "s": hexutil.EncodeBig(s), - "toAddress": t.To(), - "v": hexutil.EncodeBig(v), - "value": hexutil.EncodeBig(t.Value()), - } - return json.Marshal(out) -} diff --git a/statediff/indexer/ipld/eth_tx_test.go b/statediff/indexer/ipld/eth_tx_test.go deleted file mode 100644 index 8b459621e..000000000 --- a/statediff/indexer/ipld/eth_tx_test.go +++ /dev/null @@ -1,411 +0,0 @@ -package ipld - -import ( - "encoding/hex" - "fmt" - "os" - "strconv" - "strings" - "testing" - - block "github.com/ipfs/go-block-format" - "github.com/multiformats/go-multihash" -) - -/* - EthBlock - INPUT -*/ - -func TestTxInBlockBodyRlpParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-body-rlp-999999") - checkError(err, t) - - _, output, _, err := FromBlockRLP(fi) - checkError(err, t) - - if len(output) != 11 { - t.Fatalf("Wrong number of parsed txs\r\nexpected %d\r\ngot %d", 11, len(output)) - } - - // Oh, let's just grab the last element and one from the middle - testTx05Fields(output[5], t) - testTx10Fields(output[10], t) -} - -func TestTxInBlockHeaderRlpParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-header-rlp-999999") - checkError(err, t) - - _, output, _, err := FromBlockRLP(fi) - checkError(err, t) - - if len(output) != 0 { - t.Fatalf("Wrong number of txs\r\nexpected %d\r\ngot %d", 0, len(output)) - } -} - -func TestTxInBlockBodyJsonParsing(t *testing.T) { - fi, err := os.Open("test_data/eth-block-body-json-999999") - checkError(err, t) - - _, output, _, err := FromBlockJSON(fi) - checkError(err, t) - - if len(output) != 11 { - t.Fatalf("Wrong number of parsed txs\r\nexpected %d\r\ngot %d", 11, len(output)) - } - - testTx05Fields(output[5], t) - testTx10Fields(output[10], t) -} - -/* - OUTPUT -*/ - -func TestDecodeTransaction(t *testing.T) { - // Prepare the "fetched transaction". - // This one is supposed to be in the datastore already, - // and given away by github.com/ipfs/go-ipfs/merkledag - rawTransactionString := - "f86c34850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f25" + - "8512af0d4000801ba0e9a25c929c26d1a95232ba75aef419a91b470651eb77614695e16c" + - "5ba023e383a0679fb2fc0d0b0f3549967c0894ee7d947f07d238a83ef745bc3ced5143a4af36" - rawTransaction, err := hex.DecodeString(rawTransactionString) - checkError(err, t) - c, err := RawdataToCid(MEthTx, rawTransaction, multihash.KECCAK_256) - checkError(err, t) - - // Just to clarify: This `block` is an IPFS block - storedTransaction, err := block.NewBlockWithCid(rawTransaction, c) - checkError(err, t) - - // Now the proper test - ethTransaction, err := DecodeEthTx(storedTransaction.Cid(), storedTransaction.RawData()) - checkError(err, t) - - testTx05Fields(ethTransaction, t) -} - -/* - Block INTERFACE -*/ - -func TestEthTxLoggable(t *testing.T) { - txs := prepareParsedTxs(t) - - l := txs[0].Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-tx" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-tx", l["type"]) - } -} - -/* - Node INTERFACE -*/ - -func TestEthTxResolve(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - // Empty path - obj, rest, err := tx.Resolve([]string{}) - rtx, ok := obj.(*EthTx) - if !ok { - t.Fatal("Wrong type of returned object") - } - if rtx.Cid() != tx.Cid() { - t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", tx.Cid().String(), rtx.Cid().String()) - } - if rest != nil { - t.Fatal("est should be nil") - } - if err != nil { - t.Fatal("err should be nil") - } - - // len(p) > 1 - badCases := [][]string{ - {"two", "elements"}, - {"here", "three", "elements"}, - {"and", "here", "four", "elements"}, - } - - for _, bc := range badCases { - obj, rest, err = tx.Resolve(bc) - if obj != nil { - t.Fatal("obj should be nil") - } - if rest != nil { - t.Fatal("rest should be nil") - } - if err.Error() != fmt.Sprintf("unexpected path elements past %s", bc[0]) { - t.Fatalf("wrong error\r\nexpected %s\r\ngot %s", fmt.Sprintf("unexpected path elements past %s", bc[0]), err.Error()) - } - } - - moreBadCases := []string{ - "i", - "am", - "not", - "a", - "tx", - "field", - } - for _, mbc := range moreBadCases { - obj, rest, err = tx.Resolve([]string{mbc}) - if obj != nil { - t.Fatal("obj should be nil") - } - if rest != nil { - t.Fatal("rest should be nil") - } - - if err != ErrInvalidLink { - t.Fatalf("wrong error\r\nexpected %s\r\ngot %s", ErrInvalidLink, err) - } - } - - goodCases := []string{ - "gas", - "gasPrice", - "input", - "nonce", - "r", - "s", - "toAddress", - "v", - "value", - } - for _, gc := range goodCases { - _, _, err = tx.Resolve([]string{gc}) - if err != nil { - t.Fatalf("error should be nil %v", gc) - } - } -} - -func TestEthTxTree(t *testing.T) { - tx := prepareParsedTxs(t)[0] - _ = tx - - // Bad cases - tree := tx.Tree("non-empty-string", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = tx.Tree("non-empty-string", 1) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = tx.Tree("", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - // Good cases - tree = tx.Tree("", 1) - lookupElements := map[string]interface{}{ - "type": nil, - "gas": nil, - "gasPrice": nil, - "input": nil, - "nonce": nil, - "r": nil, - "s": nil, - "toAddress": nil, - "v": nil, - "value": nil, - } - - if len(tree) != len(lookupElements) { - t.Fatalf("Wrong number of elements\r\nexpected %d\r\ngot %d", len(lookupElements), len(tree)) - } - - for _, te := range tree { - if _, ok := lookupElements[te]; !ok { - t.Fatalf("Unexpected Element: %v", te) - } - } -} - -func TestEthTxResolveLink(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - // bad case - obj, rest, err := tx.ResolveLink([]string{"supercalifragilist"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err != ErrInvalidLink { - t.Fatalf("Wrong error\r\nexpected %s\r\ngot %s", ErrInvalidLink, err.Error()) - } - - // good case - obj, rest, err = tx.ResolveLink([]string{"nonce"}) - if obj != nil { - t.Fatalf("Expected obj to be nil") - } - if rest != nil { - t.Fatal("Expected rest to be nil") - } - if err.Error() != "resolved item was not a link" { - t.Fatalf("Wrong error\r\nexpected %s\r\ngot %s", "resolved item was not a link", err.Error()) - } -} - -func TestEthTxCopy(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - defer func() { - r := recover() - if r == nil { - t.Fatal("Expected panic") - } - if r != "implement me" { - t.Fatalf("Wrong panic message\r\nexpected %s\r\ngot %s", "'implement me'", r) - } - }() - - _ = tx.Copy() -} - -func TestEthTxLinks(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - if tx.Links() != nil { - t.Fatal("Links() expected to return nil") - } -} - -func TestEthTxStat(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - obj, err := tx.Stat() - if obj == nil { - t.Fatal("Expected a not null object node.NodeStat") - } - - if err != nil { - t.Fatal("Expected a nil error") - } -} - -func TestEthTxSize(t *testing.T) { - tx := prepareParsedTxs(t)[0] - - size, err := tx.Size() - checkError(err, t) - - spl := strings.Split(tx.Transaction.Size().String(), " ") - expectedSize, units := spl[0], spl[1] - floatSize, err := strconv.ParseFloat(expectedSize, 64) - checkError(err, t) - - var byteSize uint64 - switch units { - case "B": - byteSize = uint64(floatSize) - case "KB": - byteSize = uint64(floatSize * 1000) - case "MB": - byteSize = uint64(floatSize * 1000000) - case "GB": - byteSize = uint64(floatSize * 1000000000) - case "TB": - byteSize = uint64(floatSize * 1000000000000) - default: - t.Fatal("Unexpected size units") - } - if size != byteSize { - t.Fatalf("Wrong size\r\nexpected %d\r\ngot %d", byteSize, size) - } -} - -/* - AUXILIARS -*/ - -// prepareParsedTxs is a convenienve method -func prepareParsedTxs(t *testing.T) []*EthTx { - fi, err := os.Open("test_data/eth-block-body-rlp-999999") - checkError(err, t) - - _, output, _, err := FromBlockRLP(fi) - checkError(err, t) - - return output -} - -func testTx05Fields(ethTx *EthTx, t *testing.T) { - // Was the cid calculated? - if ethTx.Cid().String() != "bagjqcgzawhfnvdnpmpcfoug7d3tz53k2ht3cidr45pnw3y7snpd46azbpp2a" { - t.Fatalf("Wrong cid\r\nexpected %s\r\ngot %s\r\n", "bagjqcgzawhfnvdnpmpcfoug7d3tz53k2ht3cidr45pnw3y7snpd46azbpp2a", ethTx.Cid().String()) - } - - // Do we have the rawdata available? - if fmt.Sprintf("%x", ethTx.RawData()[:10]) != "f86c34850df847580082" { - t.Fatalf("Wrong Rawdata\r\nexpected %s\r\ngot %s", "f86c34850df847580082", fmt.Sprintf("%x", ethTx.RawData()[:10])) - } - - // Proper Fields of types.Transaction - if fmt.Sprintf("%x", ethTx.To()) != "32be343b94f860124dc4fee278fdcbd38c102d88" { - t.Fatalf("Wrong Recipient\r\nexpected %s\r\ngot %s", "32be343b94f860124dc4fee278fdcbd38c102d88", fmt.Sprintf("%x", ethTx.To())) - } - if len(ethTx.Data()) != 0 { - t.Fatalf("Wrong len of Data\r\nexpected %d\r\ngot %d", 0, len(ethTx.Data())) - } - if fmt.Sprintf("%v", ethTx.Gas()) != "21000" { - t.Fatalf("Wrong Gas\r\nexpected %s\r\ngot %s", "21000", fmt.Sprintf("%v", ethTx.Gas())) - } - if fmt.Sprintf("%v", ethTx.Value()) != "1091424800000000000" { - t.Fatalf("Wrong Value\r\nexpected %s\r\ngot %s", "1091424800000000000", fmt.Sprintf("%v", ethTx.Value())) - } - if fmt.Sprintf("%v", ethTx.Nonce()) != "52" { - t.Fatalf("Wrong Nonce\r\nexpected %s\r\ngot %s", "52", fmt.Sprintf("%v", ethTx.Nonce())) - } - if fmt.Sprintf("%v", ethTx.GasPrice()) != "60000000000" { - t.Fatalf("Wrong Gas Price\r\nexpected %s\r\ngot %s", "60000000000", fmt.Sprintf("%v", ethTx.GasPrice())) - } -} - -func testTx10Fields(ethTx *EthTx, t *testing.T) { - // Was the cid calculated? - if ethTx.Cid().String() != "bagjqcgzaykakwayoec6j55zmq62cbvmplgf5u5j67affge3ksi4ermgitjoa" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "bagjqcgzaykakwayoec6j55zmq62cbvmplgf5u5j67affge3ksi4ermgitjoa", ethTx.Cid().String()) - } - - // Do we have the rawdata available? - if fmt.Sprintf("%x", ethTx.RawData()[:10]) != "f8708302a120850ba43b" { - t.Fatalf("Wrong Rawdata\r\nexpected %s\r\ngot %s", "f8708302a120850ba43b", fmt.Sprintf("%x", ethTx.RawData()[:10])) - } - - // Proper Fields of types.Transaction - if fmt.Sprintf("%x", ethTx.To()) != "1c51bf013add0857c5d9cf2f71a7f15ca93d4816" { - t.Fatalf("Wrong Recipient\r\nexpected %s\r\ngot %s", "1c51bf013add0857c5d9cf2f71a7f15ca93d4816", fmt.Sprintf("%x", ethTx.To())) - } - if len(ethTx.Data()) != 0 { - t.Fatalf("Wrong len of Data\r\nexpected %d\r\ngot %d", 0, len(ethTx.Data())) - } - if fmt.Sprintf("%v", ethTx.Gas()) != "90000" { - t.Fatalf("Wrong Gas\r\nexpected %s\r\ngot %s", "90000", fmt.Sprintf("%v", ethTx.Gas())) - } - if fmt.Sprintf("%v", ethTx.Value()) != "1049756850000000000" { - t.Fatalf("Wrong Value\r\nexpected %s\r\ngot %s", "1049756850000000000", fmt.Sprintf("%v", ethTx.Value())) - } - if fmt.Sprintf("%v", ethTx.Nonce()) != "172320" { - t.Fatalf("Wrong Nonce\r\nexpected %s\r\ngot %s", "172320", fmt.Sprintf("%v", ethTx.Nonce())) - } - if fmt.Sprintf("%v", ethTx.GasPrice()) != "50000000000" { - t.Fatalf("Wrong Gas Price\r\nexpected %s\r\ngot %s", "50000000000", fmt.Sprintf("%v", ethTx.GasPrice())) - } -} diff --git a/statediff/indexer/ipld/eth_tx_trie.go b/statediff/indexer/ipld/eth_tx_trie.go deleted file mode 100644 index 1768e1856..000000000 --- a/statediff/indexer/ipld/eth_tx_trie.go +++ /dev/null @@ -1,146 +0,0 @@ -// VulcanizeDB -// Copyright © 2019 Vulcanize - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package ipld - -import ( - "fmt" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" - - "github.com/ethereum/go-ethereum/core/types" -) - -// EthTxTrie (eth-tx-trie codec 0x92) represents -// a node from the transaction trie in ethereum. -type EthTxTrie struct { - *TrieNode -} - -// Static (compile time) check that EthTxTrie satisfies the node.Node interface. -var _ node.Node = (*EthTxTrie)(nil) - -/* - INPUT -*/ - -// To create a proper trie of the eth-tx-trie objects, it is required -// to input all transactions belonging to a forest in a single step. -// We are adding the transactions, and creating its trie on -// block body parsing time. - -/* - OUTPUT -*/ - -// DecodeEthTxTrie returns an EthTxTrie object from its cid and rawdata. -func DecodeEthTxTrie(c cid.Cid, b []byte) (*EthTxTrie, error) { - tn, err := decodeTrieNode(c, b, decodeEthTxTrieLeaf) - if err != nil { - return nil, err - } - return &EthTxTrie{TrieNode: tn}, nil -} - -// decodeEthTxTrieLeaf parses a eth-tx-trie leaf -//from decoded RLP elements -func decodeEthTxTrieLeaf(i []interface{}) ([]interface{}, error) { - t := new(types.Transaction) - if err := t.UnmarshalBinary(i[1].([]byte)); err != nil { - return nil, err - } - c, err := RawdataToCid(MEthTx, i[1].([]byte), multihash.KECCAK_256) - if err != nil { - return nil, err - } - return []interface{}{ - i[0].([]byte), - &EthTx{ - Transaction: t, - cid: c, - rawdata: i[1].([]byte), - }, - }, nil -} - -/* - Block INTERFACE -*/ - -// RawData returns the binary of the RLP encode of the transaction. -func (t *EthTxTrie) RawData() []byte { - return t.rawdata -} - -// Cid returns the cid of the transaction. -func (t *EthTxTrie) Cid() cid.Cid { - return t.cid -} - -// String is a helper for output -func (t *EthTxTrie) String() string { - return fmt.Sprintf("", t.cid) -} - -// Loggable returns in a map the type of IPLD Link. -func (t *EthTxTrie) Loggable() map[string]interface{} { - return map[string]interface{}{ - "type": "eth-tx-trie", - } -} - -/* - EthTxTrie functions -*/ - -// txTrie wraps a localTrie for use on the transaction trie. -type txTrie struct { - *localTrie -} - -// newTxTrie initializes and returns a txTrie. -func newTxTrie() *txTrie { - return &txTrie{ - localTrie: newLocalTrie(), - } -} - -// getNodes invokes the localTrie, which computes the root hash of the -// transaction trie and returns its sql keys, to return a slice -// of EthTxTrie nodes. -func (tt *txTrie) getNodes() ([]*EthTxTrie, error) { - keys, err := tt.getKeys() - if err != nil { - return nil, err - } - var out []*EthTxTrie - - for _, k := range keys { - rawdata, err := tt.db.Get(k) - if err != nil { - return nil, err - } - tn := &TrieNode{ - cid: Keccak256ToCid(MEthTxTrie, k), - rawdata: rawdata, - } - out = append(out, &EthTxTrie{TrieNode: tn}) - } - - return out, nil -} diff --git a/statediff/indexer/ipld/eth_tx_trie_test.go b/statediff/indexer/ipld/eth_tx_trie_test.go deleted file mode 100644 index b067d0ea4..000000000 --- a/statediff/indexer/ipld/eth_tx_trie_test.go +++ /dev/null @@ -1,503 +0,0 @@ -package ipld - -import ( - "encoding/hex" - "encoding/json" - "fmt" - "os" - "testing" - - block "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - "github.com/multiformats/go-multihash" -) - -/* - EthBlock -*/ - -func TestTxTriesInBlockBodyJSONParsing(t *testing.T) { - // HINT: 306 txs - // cat test_data/eth-block-body-json-4139497 | jsontool | grep transactionIndex | wc -l - // or, https://etherscan.io/block/4139497 - fi, err := os.Open("test_data/eth-block-body-json-4139497") - checkError(err, t) - - _, _, output, err := FromBlockJSON(fi) - checkError(err, t) - if len(output) != 331 { - t.Fatalf("Wrong number of obtained tx trie nodes\r\nexpected %d\r\n got %d", 331, len(output)) - } -} - -/* - OUTPUT -*/ - -func TestTxTrieDecodeExtension(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - if ethTxTrie.nodeKind != "extension" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "extension", ethTxTrie.nodeKind) - } - - if len(ethTxTrie.elements) != 2 { - t.Fatalf("Wrong number of elements for an extension node\r\nexpected %d\r\ngot %d", 2, len(ethTxTrie.elements)) - } - - if fmt.Sprintf("%x", ethTxTrie.elements[0].([]byte)) != "0001" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "0001", fmt.Sprintf("%x", ethTxTrie.elements[0].([]byte))) - } - - if ethTxTrie.elements[1].(cid.Cid).String() != - "bagjacgzak6wdjvshdtb7lrvlteweyd7f5qjr3dmzmh7g2xpi4xrwoujsio2a" { - t.Fatalf("Wrong CID\r\nexpected %s\r\ngot %s", "bagjacgzak6wdjvshdtb7lrvlteweyd7f5qjr3dmzmh7g2xpi4xrwoujsio2a", ethTxTrie.elements[1].(cid.Cid).String()) - } -} - -func TestTxTrieDecodeLeaf(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieLeaf(t) - - if ethTxTrie.nodeKind != "leaf" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "leaf", ethTxTrie.nodeKind) - } - - if len(ethTxTrie.elements) != 2 { - t.Fatalf("Wrong number of elements for a leaf node\r\nexpected %d\r\ngot %d", 2, len(ethTxTrie.elements)) - } - - if fmt.Sprintf("%x", ethTxTrie.elements[0].([]byte)) != "" { - t.Fatalf("Wrong key\r\nexpected %s\r\ngot %s", "", fmt.Sprintf("%x", ethTxTrie.elements[0].([]byte))) - } - - if _, ok := ethTxTrie.elements[1].(*EthTx); !ok { - t.Fatal("Expected element to be an EthTx") - } - - if ethTxTrie.elements[1].(*EthTx).String() != - "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", ethTxTrie.elements[1].(*EthTx).String()) - } -} - -func TestTxTrieDecodeBranch(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - if ethTxTrie.nodeKind != "branch" { - t.Fatalf("Wrong nodeKind\r\nexpected %s\r\ngot %s", "branch", ethTxTrie.nodeKind) - } - - if len(ethTxTrie.elements) != 17 { - t.Fatalf("Wrong number of elements for a branch node\r\nexpected %d\r\ngot %d", 17, len(ethTxTrie.elements)) - } - - for i, element := range ethTxTrie.elements { - switch { - case i < 9: - if _, ok := element.(cid.Cid); !ok { - t.Fatal("Expected element to be a cid") - } - continue - default: - if element != nil { - t.Fatal("Expected element to be a nil") - } - } - } -} - -/* - Block INTERFACE -*/ - -func TestEthTxTrieBlockElements(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - if fmt.Sprintf("%x", ethTxTrie.RawData())[:10] != "e4820001a0" { - t.Fatalf("Wrong Data\r\nexpected %s\r\ngot %s", "e4820001a0", fmt.Sprintf("%x", ethTxTrie.RawData())[:10]) - } - - if ethTxTrie.Cid().String() != - "bagjacgzaw6ccgrfc3qnrl6joodbjjiet4haufnt2xww725luwgfhijnmg36q" { - t.Fatalf("Wrong Cid\r\nexpected %s\r\ngot %s", "bagjacgzaw6ccgrfc3qnrl6joodbjjiet4haufnt2xww725luwgfhijnmg36q", ethTxTrie.Cid().String()) - } -} - -func TestEthTxTrieString(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - if ethTxTrie.String() != "" { - t.Fatalf("Wrong String()\r\nexpected %s\r\ngot %s", "", ethTxTrie.String()) - } -} - -func TestEthTxTrieLoggable(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - l := ethTxTrie.Loggable() - if _, ok := l["type"]; !ok { - t.Fatal("Loggable map expected the field 'type'") - } - - if l["type"] != "eth-tx-trie" { - t.Fatalf("Wrong Loggable 'type' value\r\nexpected %s\r\ngot %s", "eth-tx-trie", l["type"]) - } -} - -/* - Node INTERFACE -*/ - -func TestTxTrieResolveExtension(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - _ = ethTxTrie -} - -func TestTxTrieResolveLeaf(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieLeaf(t) - - _ = ethTxTrie -} - -func TestTxTrieResolveBranch(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - indexes := []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"} - - for j, index := range indexes { - obj, rest, err := ethTxTrie.Resolve([]string{index, "nonce"}) - - switch { - case j < 9: - _, ok := obj.(*node.Link) - if !ok { - t.Fatalf("Returned object is not a link (index: %d)", j) - } - - if rest[0] != "nonce" { - t.Fatalf("Wrong rest of the path returned\r\nexpected %s\r\ngot %s", "nonce", rest[0]) - } - - if err != nil { - t.Fatal("Error should be nil") - } - - default: - if obj != nil { - t.Fatalf("Returned object should have been nil") - } - - if rest != nil { - t.Fatalf("Rest of the path returned should be nil") - } - - if err.Error() != "no such link in this branch" { - t.Fatalf("Wrong error") - } - } - } - - otherSuccessCases := [][]string{ - {"0", "1", "banana"}, - {"1", "banana"}, - {"7bc", "def"}, - {"bc", "def"}, - } - - for i := 0; i < len(otherSuccessCases); i = i + 2 { - osc := otherSuccessCases[i] - expectedRest := otherSuccessCases[i+1] - - obj, rest, err := ethTxTrie.Resolve(osc) - _, ok := obj.(*node.Link) - if !ok { - t.Fatalf("Returned object is not a link") - } - - for j := range expectedRest { - if rest[j] != expectedRest[j] { - t.Fatalf("Wrong rest of the path returned\r\nexpected %s\r\ngot %s", expectedRest[j], rest[j]) - } - } - - if err != nil { - t.Fatal("Error should be nil") - } - } -} - -func TestTraverseTxTrieWithResolve(t *testing.T) { - var err error - - txMap := prepareTxTrieMap(t) - - // This is the cid of the tx root at the block 4,139,497 - currentNode := txMap["bagjacgzaqolvvlyflkdiylijcu4ts6myxczkb2y3ewxmln5oyrsrkfc4v7ua"] - - // This is the path we want to traverse - // the transaction id 256, which is RLP encoded to 820100 - var traversePath []string - for _, s := range "820100" { - traversePath = append(traversePath, string(s)) - } - traversePath = append(traversePath, "value") - - var obj interface{} - for { - obj, traversePath, err = currentNode.Resolve(traversePath) - link, ok := obj.(*node.Link) - if !ok { - break - } - if err != nil { - t.Fatal("Error should be nil") - } - - currentNode = txMap[link.Cid.String()] - if currentNode == nil { - t.Fatal("transaction trie node not found in memory map") - } - } - - if fmt.Sprintf("%v", obj) != "0xc495a958603400" { - t.Fatalf("Wrong value\r\nexpected %s\r\ngot %s", "0xc495a958603400", fmt.Sprintf("%v", obj)) - } -} - -func TestTxTrieTreeBadParams(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - tree := ethTxTrie.Tree("non-empty-string", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = ethTxTrie.Tree("non-empty-string", 1) - if tree != nil { - t.Fatal("Expected nil to be returned") - } - - tree = ethTxTrie.Tree("", 0) - if tree != nil { - t.Fatal("Expected nil to be returned") - } -} - -func TestTxTrieTreeExtension(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - tree := ethTxTrie.Tree("", -1) - - if len(tree) != 1 { - t.Fatalf("An extension should have one element") - } - - if tree[0] != "01" { - t.Fatalf("Wrong trie element\r\nexpected %s\r\ngot %s", "01", tree[0]) - } -} - -func TestTxTrieTreeBranch(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - tree := ethTxTrie.Tree("", -1) - - lookupElements := map[string]interface{}{ - "0": nil, - "1": nil, - "2": nil, - "3": nil, - "4": nil, - "5": nil, - "6": nil, - "7": nil, - "8": nil, - } - - if len(tree) != len(lookupElements) { - t.Fatalf("Wrong number of elements\r\nexpected %d\r\ngot %d", len(lookupElements), len(tree)) - } - - for _, te := range tree { - if _, ok := lookupElements[te]; !ok { - t.Fatalf("Unexpected Element: %v", te) - } - } -} - -func TestTxTrieLinksBranch(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - desiredValues := []string{ - "bagjacgzakhtcfpja453ydiaqxgidqmxhh7jwmxujib663deebwfs3m2n3hoa", - "bagjacgza2p2fuqh4vumknq6x5w7i47usvtu5ixqins6qjjtcks4zge3vx3qq", - "bagjacgza4fkhn7et3ra66yjkzbtvbxjefuketda6jctlut6it7gfahxhywga", - "bagjacgzacnryeybs52xryrka5uxi4eg4hi2mh66esaghu7cetzu6fsukrynq", - "bagjacgzastu5tc7lwz4ap3gznjwkyyepswquub7gvhags5mgdyfynnwbi43a", - "bagjacgza5qgp76ovvorkydni2lchew6ieu5wb55w6hdliiu6vft7zlxtdhjq", - "bagjacgzafnssc4yvln6zxmks5roskw4ckngta5n4yfy2skhlu435ve4b575a", - "bagjacgzagkuei7qxfxefufme2d3xizxokkq4ad3rzl2x4dq2uao6dcr4va2a", - "bagjacgzaxpaehtananrdxjghwukh2wwkkzcqwveppf6xclkrtd26rm27kqwq", - } - - links := ethTxTrie.Links() - - for i, v := range desiredValues { - if links[i].Cid.String() != v { - t.Fatalf("Wrong cid for link %d\r\nexpected %s\r\ngot %s", i, v, links[i].Cid.String()) - } - } -} - -/* - EthTxTrie Functions -*/ - -func TestTxTrieJSONMarshalExtension(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieExtension(t) - - jsonOutput, err := ethTxTrie.MarshalJSON() - checkError(err, t) - - var data map[string]interface{} - err = json.Unmarshal(jsonOutput, &data) - checkError(err, t) - - if parseMapElement(data["01"]) != - "bagjacgzak6wdjvshdtb7lrvlteweyd7f5qjr3dmzmh7g2xpi4xrwoujsio2a" { - t.Fatalf("Wrong Marshaled Value\r\nexpected %s\r\ngot %s", "bagjacgzak6wdjvshdtb7lrvlteweyd7f5qjr3dmzmh7g2xpi4xrwoujsio2a", parseMapElement(data["01"])) - } - - if data["type"] != "extension" { - t.Fatalf("Wrong node type\r\nexpected %s\r\ngot %s", "extension", data["type"]) - } -} - -func TestTxTrieJSONMarshalLeaf(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieLeaf(t) - - jsonOutput, err := ethTxTrie.MarshalJSON() - checkError(err, t) - - var data map[string]interface{} - err = json.Unmarshal(jsonOutput, &data) - checkError(err, t) - - if data["type"] != "leaf" { - t.Fatalf("Wrong node type\r\nexpected %s\r\ngot %s", "leaf", data["type"]) - } - - if fmt.Sprintf("%v", data[""].(map[string]interface{})["nonce"]) != - "40243" { - t.Fatalf("Wrong nonce value\r\nexepcted %s\r\ngot %s", "40243", fmt.Sprintf("%v", data[""].(map[string]interface{})["nonce"])) - } -} - -func TestTxTrieJSONMarshalBranch(t *testing.T) { - ethTxTrie := prepareDecodedEthTxTrieBranch(t) - - jsonOutput, err := ethTxTrie.MarshalJSON() - checkError(err, t) - - var data map[string]interface{} - err = json.Unmarshal(jsonOutput, &data) - checkError(err, t) - - desiredValues := map[string]string{ - "0": "bagjacgzakhtcfpja453ydiaqxgidqmxhh7jwmxujib663deebwfs3m2n3hoa", - "1": "bagjacgza2p2fuqh4vumknq6x5w7i47usvtu5ixqins6qjjtcks4zge3vx3qq", - "2": "bagjacgza4fkhn7et3ra66yjkzbtvbxjefuketda6jctlut6it7gfahxhywga", - "3": "bagjacgzacnryeybs52xryrka5uxi4eg4hi2mh66esaghu7cetzu6fsukrynq", - "4": "bagjacgzastu5tc7lwz4ap3gznjwkyyepswquub7gvhags5mgdyfynnwbi43a", - "5": "bagjacgza5qgp76ovvorkydni2lchew6ieu5wb55w6hdliiu6vft7zlxtdhjq", - "6": "bagjacgzafnssc4yvln6zxmks5roskw4ckngta5n4yfy2skhlu435ve4b575a", - "7": "bagjacgzagkuei7qxfxefufme2d3xizxokkq4ad3rzl2x4dq2uao6dcr4va2a", - "8": "bagjacgzaxpaehtananrdxjghwukh2wwkkzcqwveppf6xclkrtd26rm27kqwq", - } - - for k, v := range desiredValues { - if parseMapElement(data[k]) != v { - t.Fatalf("Wrong Marshaled Value %s\r\nexpected %s\r\ngot %s", k, v, parseMapElement(data[k])) - } - } - - for _, v := range []string{"a", "b", "c", "d", "e", "f"} { - if data[v] != nil { - t.Fatal("Expected value to be nil") - } - } - - if data["type"] != "branch" { - t.Fatalf("Wrong node type\r\nexpected %s\r\ngot %s", "branch", data["type"]) - } -} - -/* - AUXILIARS -*/ - -// prepareDecodedEthTxTrie simulates an IPLD block available in the datastore, -// checks the source RLP and tests for the absence of errors during the decoding fase. -func prepareDecodedEthTxTrie(branchDataRLP string, t *testing.T) *EthTxTrie { - b, err := hex.DecodeString(branchDataRLP) - checkError(err, t) - - c, err := RawdataToCid(MEthTxTrie, b, multihash.KECCAK_256) - checkError(err, t) - - storedEthTxTrie, err := block.NewBlockWithCid(b, c) - checkError(err, t) - - ethTxTrie, err := DecodeEthTxTrie(storedEthTxTrie.Cid(), storedEthTxTrie.RawData()) - checkError(err, t) - - return ethTxTrie -} - -func prepareDecodedEthTxTrieExtension(t *testing.T) *EthTxTrie { - extensionDataRLP := - "e4820001a057ac34d6471cc3f5c6ab992c4c0fe5ec131d8d9961fe6d5de8e5e367513243b4" - return prepareDecodedEthTxTrie(extensionDataRLP, t) -} - -func prepareDecodedEthTxTrieLeaf(t *testing.T) *EthTxTrie { - leafDataRLP := - "f87220b86ff86d829d3384ee6b280083015f9094e0e6c781b8cba08bc840" + - "7eac0101b668d1fa6f4987c495a9586034008026a0981b6223c9d3c31971" + - "6da3cf057da84acf0fef897f4003d8a362d7bda42247dba066be134c4bc4" + - "32125209b5056ef274b7423bcac7cc398cf60b83aaff7b95469f" - return prepareDecodedEthTxTrie(leafDataRLP, t) -} - -func prepareDecodedEthTxTrieBranch(t *testing.T) *EthTxTrie { - branchDataRLP := - "f90131a051e622bd20e77781a010b9903832e73fd3665e89407ded8c840d8b2db34dd9" + - "dca0d3f45a40fcad18a6c3d7edbe8e7e92ace9d45e086cbd04a66254b9931375bee1a0" + - "e15476fc93dc41ef612ac86750dd242d14498c1e48a6ba4fc89fcc501ee7c58ca01363" + - "826032eeaf1c4540ed2e8e10dc3a34c3fbc4900c7a7c449e69e2ca8a8e1ba094e9d98b" + - "ebb67807ecd96a6cac608f95a14a07e6a9c06975861e0b86b6c14736a0ec0cfff9d5ab" + - "a2ac0da8d2c4725bc8253b60f7b6f1c6b4229ea967fcaef319d3a02b652173155b7d9b" + - "b152ec5d255b82534d3075bcc171a928eba737da9381effaa032a8447e172dc85a1584" + - "d0f77466ee52a1c00f71caf57e0e1aa01de18a3ca834a0bbc043cc0d03623ba4c7b514" + - "7d5aca56450b548f797d712d5198f5e8b35f542d8080808080808080" - return prepareDecodedEthTxTrie(branchDataRLP, t) -} - -func prepareTxTrieMap(t *testing.T) map[string]*EthTxTrie { - fi, err := os.Open("test_data/eth-block-body-json-4139497") - checkError(err, t) - - _, _, txTrieNodes, err := FromBlockJSON(fi) - checkError(err, t) - - out := make(map[string]*EthTxTrie) - - for _, txTrieNode := range txTrieNodes { - decodedNode, err := DecodeEthTxTrie(txTrieNode.Cid(), txTrieNode.RawData()) - checkError(err, t) - out[txTrieNode.Cid().String()] = decodedNode - } - - return out -} diff --git a/statediff/indexer/ipld/interface.go b/statediff/indexer/ipld/interface.go new file mode 100644 index 000000000..73a4bed92 --- /dev/null +++ b/statediff/indexer/ipld/interface.go @@ -0,0 +1,8 @@ +package ipld + +import "github.com/ipfs/go-cid" + +type IPLD interface { + Cid() cid.Cid + RawData() []byte +} diff --git a/statediff/indexer/ipld/shared.go b/statediff/indexer/ipld/shared.go index c62ce1d3c..4c2edb3db 100644 --- a/statediff/indexer/ipld/shared.go +++ b/statediff/indexer/ipld/shared.go @@ -17,16 +17,6 @@ package ipld import ( - "bytes" - "errors" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/ethdb" - "github.com/ethereum/go-ethereum/rlp" - sdtrie "github.com/ethereum/go-ethereum/statediff/trie_helpers" - sdtypes "github.com/ethereum/go-ethereum/statediff/types" - "github.com/ethereum/go-ethereum/trie" "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" ) @@ -49,11 +39,6 @@ const ( MEthLog = 0x9a ) -var ( - nullHashBytes = common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000000") - ErrInvalidLink = errors.New("no such link") -) - // RawdataToCid takes the desired codec and a slice of bytes // and returns the proper cid of the object. func RawdataToCid(codec uint64, rawdata []byte, multiHash uint64) (cid.Cid, error) { @@ -79,136 +64,3 @@ func Keccak256ToCid(codec uint64, h []byte) cid.Cid { return cid.NewCidV1(codec, mh.Multihash(buf)) } - -// commonHashToCid takes a go-ethereum common.Hash and returns its -// cid based on the codec given, -func commonHashToCid(codec uint64, h common.Hash) cid.Cid { - mhash, err := mh.Encode(h[:], mh.KECCAK_256) - if err != nil { - panic(err) - } - - return cid.NewCidV1(codec, mhash) -} - -// localTrie wraps a go-ethereum trie and its underlying memory db. -// It contributes to the creation of the trie node objects. -type localTrie struct { - db ethdb.Database - trieDB *trie.Database - trie *trie.Trie -} - -// newLocalTrie initializes and returns a localTrie object -func newLocalTrie() *localTrie { - var err error - lt := &localTrie{} - lt.db = rawdb.NewMemoryDatabase() - lt.trieDB = trie.NewDatabase(lt.db) - lt.trie, err = trie.New(common.Hash{}, common.Hash{}, lt.trieDB) - if err != nil { - panic(err) - } - return lt -} - -// Add receives the index of an object and its rawdata value -// and includes it into the localTrie -func (lt *localTrie) Add(idx int, rawdata []byte) error { - key, err := rlp.EncodeToBytes(uint(idx)) - if err != nil { - panic(err) - } - return lt.trie.TryUpdate(key, rawdata) -} - -// rootHash returns the computed trie root. -// Useful for sanity checks on parsed data. -func (lt *localTrie) rootHash() []byte { - return lt.trie.Hash().Bytes() -} - -func (lt *localTrie) commit() error { - // commit trie nodes to trieDB - ltHash, trieNodes, err := lt.trie.Commit(true) - if err != nil { - return err - } - //new trie.Commit method signature also requires Update with returned NodeSet - if trieNodes != nil { - lt.trieDB.Update(trie.NewWithNodeSet(trieNodes)) - } - - // commit trieDB to the underlying ethdb.Database - if err := lt.trieDB.Commit(ltHash, false, nil); err != nil { - return err - } - return nil -} - -// getKeys returns the stored keys of the memory sql -// of the localTrie for further processing. -func (lt *localTrie) getKeys() ([][]byte, error) { - if err := lt.commit(); err != nil { - return nil, err - } - - // collect all of the node keys - it := lt.trie.NodeIterator([]byte{}) - keyBytes := make([][]byte, 0) - for it.Next(true) { - if it.Leaf() || bytes.Equal(nullHashBytes, it.Hash().Bytes()) { - continue - } - keyBytes = append(keyBytes, it.Hash().Bytes()) - } - return keyBytes, nil -} - -type nodeKey struct { - dbKey []byte - TrieKey []byte -} - -// getLeafKeys returns the stored leaf keys from the memory sql -// of the localTrie for further processing. -func (lt *localTrie) getLeafKeys() ([]*nodeKey, error) { - if err := lt.commit(); err != nil { - return nil, err - } - - it := lt.trie.NodeIterator([]byte{}) - leafKeys := make([]*nodeKey, 0) - for it.Next(true) { - if it.Leaf() || bytes.Equal(nullHashBytes, it.Hash().Bytes()) { - continue - } - - node, nodeElements, err := sdtrie.ResolveNode(it, lt.trieDB) - if err != nil { - return nil, err - } - - if node.NodeType != sdtypes.Leaf { - continue - } - - partialPath := trie.CompactToHex(nodeElements[0].([]byte)) - valueNodePath := append(node.Path, partialPath...) - encodedPath := trie.HexToCompact(valueNodePath) - leafKey := encodedPath[1:] - - leafKeys = append(leafKeys, &nodeKey{dbKey: it.Hash().Bytes(), TrieKey: leafKey}) - } - return leafKeys, nil -} - -// getRLP encodes the given object to RLP returning its bytes. -func getRLP(object interface{}) []byte { - buf := new(bytes.Buffer) - if err := rlp.Encode(buf, object); err != nil { - panic(err) - } - - return buf.Bytes() -} diff --git a/statediff/indexer/ipld/test_data/error-tx-eth-block-body-json-999999 b/statediff/indexer/ipld/test_data/error-tx-eth-block-body-json-999999 deleted file mode 100644 index 8654b53a9..000000000 --- a/statediff/indexer/ipld/test_data/error-tx-eth-block-body-json-999999 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","result":{"author":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","difficulty":"0xb6b4beb1e8e","extraData":"0xd783010303844765746887676f312e342e32856c696e7578","gasLimit":"0x2fefd8","gasUsed":"0x38658","hash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","mixHash":"0x5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0","nonce":"0xf491f46b60fe04b3","number":"0xf423f","parentHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","receiptsRoot":"0x7fa0f6ca2a01823208d80801edad37e3e3a003b55c89319b45eb1f97862ad229","sealFields":["0xa05b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0","0x88f491f46b60fe04b3"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x6e8","stateRoot":"0xed98aa4b5b19c82fb35364f08508ae0a6dec665fa57663dca94c5d70554cde10","timestamp":"0x56bfb405","totalDifficulty":"0x6305496c80ab5c3f","transactions":[{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0xc3665b8a9224ba8da9a20322f31d599cafa52c5c","gas":"0x5209","gasPrice":"0xdf8475800","hash":"0x22879e0bc9602fef59dc0602f9bc385f12632da5cb4eee4b813a0c27159c4d24","input":"0x","networkId":null,"nonce":"0x1d3","publicKey":"0xc3dbee74f1b2b8dbedc417244b7f5a134c6f7769faf9ffe784b3f0fdda7ca52cf914d3f2b3164c009bf939796b77f047ccb4cc113d3bde5b06555b781e0c7149","r":"0x43531017f1569ec692c0bf1ad710ddb5158b60505ea33fb7a21245738539e2d5","raw":"0xf86e8201d3850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d8888102363ac310a4000801ca043531017f1569ec692c0bf1ad710ddb5158b60505ea33fb7a21245738539e2d5a03856c6a1117ff71e9b769ccb6960674038a3326c3dd84c152fc83ada28145a07","s":"0x3856c6a1117ff71e9b769ccb6960674038a3326c3dd84c152fc83ada28145a07","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x0","v":"0x1c","value":"0x102363ac310a4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x4ce758b0c8aa655b77c14f16bd0190b5715be75a","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x3c634bf5f09f6b5b5ea377df7abb483f422ae5d4ba389c395f14f833de25d362","input":"0x","networkId":null,"nonce":"0x9","publicKey":"0x75022ee25c702fc6a53853843e00e87877e737f9c631a9d831c11693d7e31877a1b09755ab3a5c112decf57339839364b8b9a3c23ada01761b1e3a044e297316","r":"0x8219a4f30cb8dd7d5e1163ac433f207b599d804b0d74ee54c8694014db647700","raw":"0xf86c09850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880ed350879ce50000801ba08219a4f30cb8dd7d5e1163ac433f207b599d804b0d74ee54c8694014db647700a03db2e806986a746d44d675fdbbd7594bb2856946ba257209abfffdd1628141af","s":"0x3db2e806986a746d44d675fdbbd7594bb2856946ba257209abfffdd1628141af","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x1","v":"0x1b","value":"0xed350879ce50000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x30906581413d556de1a018adbe6cc63c88d58512","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x59feccaad599e776cd6635e68b5e19254cca3b38e49437044f1e1d15d00b0576","input":"0x","networkId":null,"nonce":"0x59","publicKey":"0xccf6be26c1eb1c89d5fe958db0112a46e3ac23a95ac0f709ce84a49ae3f20bcf143909bfe67f685caaf362066e1c7e224899f57678bbcecb7a720175bcbb387d","r":"0x1ca26859a6eed116312010359c2e8351d126f31b078a0e2e19aae0acc98d9488","raw":"0xf86c59850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88882b0ca8b9f5f02000801ba01ca26859a6eed116312010359c2e8351d126f31b078a0e2e19aae0acc98d9488a0172c1a299737440a9063af6547d567ca7d269bfc2a9e81ec1de21aa8bd8e17b1","s":"0x172c1a299737440a9063af6547d567ca7d269bfc2a9e81ec1de21aa8bd8e17b1","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x2","v":"0x1b","value":"0x2b0ca8b9f5f02000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x8bec4e6fb1a28820eb1e8ec2d4eae4842ed2f923","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x98a03afa804e248ada5f26e9118ae927d4d3cb60e78c54938dced1cf25ee3567","input":"0x","networkId":null,"nonce":"0x2","publicKey":"0xbc8c89a85804c7859069c13561dbbd8d1d4739ec7d18514c42b3ffea64529cee522a5e20d93373d0074e94c4c7b6eba51c7d2f18ef7c64c37520342acb233795","r":"0xa5aca100a264a8da4a58bef77c5116a6dde42186ac249623c0edcb30189640a","raw":"0xf86c02850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880fd037ba87693800801ba00a5aca100a264a8da4a58bef77c5116a6dde42186ac249623c0edcb30189640aa0783e9439755023b919897574f94337aaac4a1ddc20217e3ac264a7edf813ffdd","s":"0x783e9439755023b919897574f94337aaac4a1ddc20217e3ac264a7edf813ffdd","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x3","v":"0x1b","value":"0xfd037ba87693800"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x4835a9626b02369546502d2949e16b0fda110b0c","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x18f1e6430334ad548bc36fc317016bc9f7a076d1fa50a89fe4e1d095ed3f9562","input":"0x","networkId":null,"nonce":"0xd9","publicKey":"0x91b3b4fe89d112cfc7308619e8aa7de86f14af3f6b6e4e92becb6e29e98207835bbe1a69109c16b14b0eb7285d2b952a9cde6007932afe95e81eefc183f75314","r":"0xb93c6f8dce800a1ec57d70813c4d35e3ffe25a6f1ae9057cf706636cf34d662","raw":"0xf86d81d9850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d888814bac05c835a5400801ba00b93c6f8dce800a1ec57d70813c4d35e3ffe25a6f1ae9057cf706636cf34d662a06d254a5557b7716ef01dd28aa84cc919f397c0a778f3a109a1ee9df2fc530ec0","s":"0x6d254a5557b7716ef01dd28aa84cc919f397c0a778f3a109a1ee9df2fc530ec0","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x4","v":"0x1b","value":"0x14bac05c835a5400"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x9cc72ebf3daaf12c72e48605e1e67b47c95a1911","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xb1cada8daf63c45750df1ee79eed5a3cf6240e3cebdb6de3f26bc7cf03217bf4","input":"0x","networkId":null,"nonce":"0x34","publicKey":"0x90dff18c1c01d566e6d8bf0190e3e965f98e7f51ccbbe6040f9a9972e88f4ad19f1547406454fbc9e1ebcf4c5f2f1e2df9b9371028fe0a552ecca5f5f0aa4129","r":"0xe9a25c929c26d1a95232ba75aef419a91b470651eb77614695e16c5ba023e383","raw":"0xf86c34850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f258512af0d4000801ba0e9a25c929c26d1a95232ba75aef419a91b470651eb77614695e16c5ba023e383a0679fb2fc0d0b0f3549967c0894ee7d947f07d238a83ef745bc3ced5143a4af36","s":"0x679fb2fc0d0b0f3549967c0894ee7d947f07d238a83ef745bc3ced5143a4af36","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x5","v":"0x1b","value":"0xf258512af0d4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x5c51467399bc655f0cc6db88df15946717534633","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x4fa879b491e0779fc035758ec77b93c4e51d528d65b64eb055c015a58deff103","input":"0x","networkId":null,"nonce":"0x6f","publicKey":"0x0b7e2532afc2daa33763002525aa6c7edc25ea97d63baeeb2c6f5094f18dca4a0212b52061f9a9091aad5c4380a6506f9a51ddd2d014e78742bf144a58d6ffa0","r":"0x9e0b8360a36d6d0320aef19bd811431b1a692504549da9f05f9b4d9e329993b9","raw":"0xf86c6f850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88881c54e302456eb400801ca09e0b8360a36d6d0320aef19bd811431b1a692504549da9f05f9b4d9e329993b9a05acff70bd8cf82d9d70b11d4e59dc5d54937475ec394ec846263495f61e5e6ee","s":"0x5acff70bd8cf82d9d70b11d4e59dc5d54937475ec394ec846263495f61e5e6ee","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x6","v":"0x1c","value":"0x1c54e302456eb400"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x055d9d7ec193d1e062c6ec4fa80ef89b5c1258f4","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x1bea59827ab153b20cee79890d221a80fa6a04e552d667504c592ed314fb6d76","input":"0x","networkId":null,"nonce":"0x46","publicKey":"0xfae19a0ac08d36f0229663d45d0c41ca52c4e295c7af82a1b39515a79025175293400d026e0d41767aac42f8b7e4a6687c5762161457d753f1fc0766614868f9","r":"0xb2803f1bfa237bda762d214f71a4c71a7306f55df2880c77d746024e81ccbaa2","raw":"0xf86c46850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f0447b1edca4000801ca0b2803f1bfa237bda762d214f71a4c71a7306f55df2880c77d746024e81ccbaa2a07aeed35c0cbfbe0ed6552fd55b3f57fdc054eeabd02fc61bf66d9a8843aa593a","s":"0x7aeed35c0cbfbe0ed6552fd55b3f57fdc054eeabd02fc61bf66d9a8843aa593a","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x7","v":"0x1c","value":"0xf0447b1edca4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x8e68c0c9b5275fa684291304af9cafe6ceaf2772","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x73e87db1108a2aa852f48e088ca1a2771f9b7c18af8d1bd77a3cdcc72a750c56","input":"0x","networkId":null,"nonce":"0x3","publicKey":"0xa5e423dfcbdbba1fdbb785367a88235fa2569061d72b6c715111ac21cbef8fc1db860acdef85f1408c760f34b28a4f07d950ac15c4b85d5e528e50f546a89b6d","r":"0x6dccb1349919662c40455aee04472ae307195580837510ecf2e6fc428876eb03","raw":"0xf86d03850ba43b740083015f909426016a2b5d872adc1b131a4cd9d4b18789d0d9eb88016345785d8a0000801ba06dccb1349919662c40455aee04472ae307195580837510ecf2e6fc428876eb03a03b84ea9c3c6462ac086a1d789a167c2735896a6b5a40e85a6e45da8884fe27de","s":"0x3b84ea9c3c6462ac086a1d789a167c2735896a6b5a40e85a6e45da8884fe27de","standardV":"0x0","to":"0x26016a2b5d872adc1b131a4cd9d4b18789d0d9eb","transactionIndex":"0x8","v":"0x1b","value":"0x16345785d8a0000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x337a5e90b73f44ffebea73cb3d97738c524f63e1032b30735e43212cff731aee","input":"0x","networkId":null,"nonce":"0x2a11f","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0xaa8909295ff178639df961126970f44b5d894326eb47cead161f6910799a98b8","raw":"0xf8708302a11f850ba43b740083015f90945275c3371ece4d4a5b1e14cf6dbfc2277d58ef92880e93ea6a35f2e000801ba0aa8909295ff178639df961126970f44b5d894326eb47cead161f6910799a98b8a0254d7742eccaf2f4c44bfe638378dcf42bdde9465f231b89003cc7927de5d46e","s":"0x254d7742eccaf2f4c44bfe638378dcf42bdde9465f231b89003cc7927de5d46e","standardV":"0x0","to":"0x5275c3371ece4d4a5b1e14cf6dbfc2277d58ef92","transactionIndex":"0x9","v":"0x1b","value":"0xe93ea6a35f2e000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0xc280ab030e20bc9ef72c87b420d58f598bda753ef80a53136a923848b0c89a5c","input":"0x","networkId":null,"nonce":"0x2a120","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0xcfe3ad31d6612f8d787c45f115cc5b43fb22bcc210b62ae71dc7cbf0a6bea8df","raw":"0xf8708302a120850ba43b740083015f90941c51bf013add0857c5d9cf2f71a7f15ca93d4816880e917c4b10c87400801ca0cfe3ad31d6612f8d787c45f115cc5b43fb22bcc210b62ae71dc7cbf0a6bea8dfa057db8998114fae3c337e99dbd8573d4085691880f4576c6c1f6c5bbfe67d6cf0","s":"0x57db8998114fae3c337e99dbd8573d4085691880f4576c6c1f6c5bbfe67d6cf0","standardV":"0x1","to":"0x1c51bf013add0857c5d9cf2f71a7f15ca93d4816","transactionIndex":"0xa","v":"0x1c","value":"0xe917c4b10c87400"}],"transactionsRoot":"0x447cbd8c48f498a6912b10831cdff59c7fbfcbbe735ca92883d4fa06dcd7ae54","uncles":[]},"id":1} diff --git a/statediff/indexer/ipld/test_data/eth-block-body-json-0 b/statediff/indexer/ipld/test_data/eth-block-body-json-0 deleted file mode 100644 index e7dfbca84..000000000 --- a/statediff/indexer/ipld/test_data/eth-block-body-json-0 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","id":1,"result":{"author":"0x0000000000000000000000000000000000000000","difficulty":"0x400000000","extraData":"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit":"0x1388","gasUsed":"0x0","hash":"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x0000000000000000000000000000000000000000","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x0000000000000042","number":"0x0","parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","sealFields":["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000042"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x21c","stateRoot":"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544","timestamp":"0x0","totalDifficulty":"0x400000000","transactions":[],"transactionsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","uncles":[]}} \ No newline at end of file diff --git a/statediff/indexer/ipld/test_data/eth-block-body-json-4139497 b/statediff/indexer/ipld/test_data/eth-block-body-json-4139497 deleted file mode 100644 index 02ef39584..000000000 --- a/statediff/indexer/ipld/test_data/eth-block-body-json-4139497 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","id":1,"result":{"difficulty":"0x5c647cfc07f1a","extraData":"0x65746865726d696e652d6173696137","gasLimit":"0x668fd6","gasUsed":"0x655bf3","hash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","logsBloom":"0x00004000840000000004000400000006008800000000000000900000000000000002000000100000000000000000020000000000004000000000080000080000000000000200000000000008000000000001000000000000000000000800000000014000000200000000804040000200000000000100008004000110001000200000020400000000800200000008000000400080008000200000001040000100002000000000000002000000000000000000010000000010080000000000000010080002000000000000002001000000000000040000000120200000000000000100000100000000000000000000000000000000000000000000040800000000","miner":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","mixHash":"0x2a65887132d93df4ad543ea9ab69b2de12bf1ef0d9a5b9128fe557a7cf6e365c","nonce":"0x68b593b0029de941","number":"0x3f29e9","parentHash":"0xf8ef0dc32d00fe925c9ac3039f3fe202ac6988f37b3710840848ecf29a4905d9","receiptsRoot":"0xf17608f36b1fc813fefd9cbd1fd653195de20ab72f2efcc95f7e00c6576080d6","sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x8a42","stateRoot":"0x3258ad3d8a73140be9d3895166f3f88b0f65a5575d8176f10dc2a6dddac36b64","timestamp":"0x598c1020","totalDifficulty":"0x23bcce551ec1d5055c","transactions":[{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x55335d56e95151bce1635bce649175ea954aecee","gas":"0x2117a","gasPrice":"0xbdfd63e00","hash":"0x51f9d60ce19d4174224f91be402d4504553f127511a630a18a8735b4c1db072e","input":"0x0f2c9329000000000000000000000000fbb1b73c4f0bda4f67dca266ce6ef42f520fbb98000000000000000000000000e592b0d8baa2cb677034389b76a71b0d1823e0d1","nonce":"0x1","to":"0xe94b04a0fed112f3664e45adb2b8915693dd5ff3","transactionIndex":"0x0","value":"0xb7ce92a6fa0400","v":"0x26","r":"0xaa97e8fb84036ed395fab0e05f4432e219e855539a17a73444e915a3f18d7f15","s":"0x117401fbe04f6c8316ba4c344b37de5d1b5a6fc252160a093e7270d6fd37c2c4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d9dc","gasPrice":"0xbdfd63e00","hash":"0x57a6c52559d193fef65f8b99fdd46f341f0739ba7d4a772a87d8fad89fc2cff5","input":"0xa9059cbb000000000000000000000000744346c50253300694aea6d7e03f55a3ea91f8a30000000000000000000000000000000000000000000000000000013061e0a9ab","nonce":"0xc104d","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x1","value":"0x0","v":"0x25","r":"0xe925321edf5dc905fa0ebf9a08d8915e0ce90463d55c19e8bdf0dc8e5e6ddc73","s":"0x328a5099139ae2e3f3be2736dec30fd2b3240892b77575e588b8f84a0e11307b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xa624ceb708a1e9a3962de82c5a3c5850db0097f1","gas":"0x2117a","gasPrice":"0xbdfd63e00","hash":"0x616694b9e9aea8d913797a50958a9343e18451ccb2abffa1b10b2d06378c612f","input":"0x0f2c9329000000000000000000000000fbb1b73c4f0bda4f67dca266ce6ef42f520fbb98000000000000000000000000e592b0d8baa2cb677034389b76a71b0d1823e0d1","nonce":"0x24","to":"0xe94b04a0fed112f3664e45adb2b8915693dd5ff3","transactionIndex":"0x2","value":"0xa9f1b6b74205400","v":"0x26","r":"0x4b6f583ee70f4aabad8da3c97a0b1d7bd18ef6463aa08fb730696b758abe255c","s":"0x1a13f3c8fef9b92c28151db22b03b9b9894b2d7ef103a38b204ac5ba970073fe"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xb083a0287b4e7f8319eee74b27e42bdd77da4e1a","gas":"0x2117a","gasPrice":"0xbdfd63e00","hash":"0x92a84244da41cd93c1c0ab7b7d13556453d3fd76317a71fa89ba129ad4c9d80e","input":"0x0f2c9329000000000000000000000000fbb1b73c4f0bda4f67dca266ce6ef42f520fbb98000000000000000000000000e592b0d8baa2cb677034389b76a71b0d1823e0d1","nonce":"0x3","to":"0xe94b04a0fed112f3664e45adb2b8915693dd5ff3","transactionIndex":"0x3","value":"0xd51851e1dacc00","v":"0x26","r":"0xc8304a7acbaddcdd4ac10216697ea88d1b154c9d0de42fb75ad9a301fef38cc1","s":"0x76cdd85171fb9da403def3fbfafb8545835aebeb9a541e6207d9d373914e1e8d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xc348b6a2758fb408e5cce34d43feee1726692e0d","gas":"0x13880","gasPrice":"0x719f11100","hash":"0x164a9b95e7914ef6071b6228699635e8e8d58b4d60fd4736aabd87b5bcf8d5fb","input":"0x","nonce":"0x3b","to":"0x7727e5113d1d161373623e5f49fd568b4f543a9e","transactionIndex":"0x4","value":"0x18f7be6e64863700","v":"0x25","r":"0xfb14159445060e4a1809e7d959210da4151fe1535c8b9aa9158b5d7536b0fbac","s":"0x3563cf5da676135b36d9d2305f1ee133452280e2c1abe16bda50fe502557d1d9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xd3273eba07248020bf98a8b560ec1576a612102f","gas":"0x5208","gasPrice":"0x6fc23ac00","hash":"0x5d6f0ac462923b852080c3b96afa862bc93a4bc605e5feb9bda64780d6c89089","input":"0x","nonce":"0x67ac","to":"0xd66f7b11c7da581406d62a501fdee675466f4593","transactionIndex":"0x5","value":"0x5bd6662df2c3c400","v":"0x1c","r":"0xf042ec51b11a4c14cb7f48e50e3c4278965530f9e5c4a17926e47f83dbf09fe5","s":"0x5eee0c65eacdabfb60688656d108ab5dc74dce9ad79f661148bbba7694a5c191"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x3b0bc51ab9de1e5b7b6e34e5b960285805c41736","gas":"0x5208","gasPrice":"0x6fc23ac00","hash":"0x8c951abf8f855e94f1059a0b9f9de8e23e12ffc7d4511e0dcbfe73060ff2e9ee","input":"0x","nonce":"0x6595","to":"0x7c402ca59a701f6b3f077f175b4c964122043221","transactionIndex":"0x6","value":"0x5bd6662df2c3c400","v":"0x1c","r":"0x36d4084792312a9aafd676e0570acc14b29b590bc3f38e0c643ff278653628ae","s":"0x4f25d719cd23e3fb88bd205e955d8127c819d208046e83f9ac9a47c35ec2a814"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x093177dbaa25a001e3ee343d3ec492e71b9367aa","gas":"0x6271","gasPrice":"0x6c7fc3b40","hash":"0xecc2c35c2ca748c7eb2970d76288e34ab514a48c60670ba5fa04ec50d59be1f5","input":"0x","nonce":"0x2","to":"0xda1b2aeac0196d39658186604609fff185e1774d","transactionIndex":"0x7","value":"0x5b09cd3e5e90000","v":"0x26","r":"0xef0a0125e0984c9a59fbe475df19bed2fcbfbe02ced04ad9f5f25530e276a527","s":"0x7ce66b31396aaf02a34d966e87e03ba9f04ac021f56e8ca1cd6124434df61ab1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xf04ad0c7eb4ed654c52477f8e756800bde9f2341","gas":"0x5208","gasPrice":"0x4e3b29200","hash":"0x7475e0a920d21ee08b85f0ec61b02ed646190ff23ae2805dfef4cfe81c59a46e","input":"0x","nonce":"0x427","to":"0x1e4f986d287bacf4283d35ca61fb342ca91674d6","transactionIndex":"0x8","value":"0x3d48c89a6020000","v":"0x26","r":"0xdab319aff51e0755b832a17fba0e4778895980eb6cb87a2aa4b35edd418163ef","s":"0x10dc3f986fe67347e293177acdd0dbfa7a910d64c9c484a0635221dd652a6191"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xb2930b35844a230f00e51431acae96fe543a0347","gas":"0x186a0","gasPrice":"0x4a817c800","hash":"0x070599a9b0a4e550cdb1b5068d0d3bfe3fc0d60302973d3b3abad3a4762ae81c","input":"0x","nonce":"0x569fe","to":"0x79d56207445e24f5eeb391358924a39c620dd1e0","transactionIndex":"0x9","value":"0x21c60092fff800","v":"0x26","r":"0x77ba2e5b7c617e6ad54a7d4ca14362837cdd3138648a0855436a6fef99033d4d","s":"0x6714b8b257a8c714b2395fca0a8bfd9299fa3d759da9c01a2582d7114a316f05"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xcbf44ffb74ae94a4b696e716964b1d69400c7749","gas":"0x11170","gasPrice":"0x4a817c800","hash":"0xa3031fce94886738b6666b8a58233e845e9fd4ced150f65c043738fc54ccc7bb","input":"0xa9059cbb000000000000000000000000e74db956a107baa7cadc1258a6f539f40fc4fec100000000000000000000000000000000000000000000000000000002caa8e180","nonce":"0x0","to":"0x93e682107d1e9defb0b5ee701c71707a4b2e46bc","transactionIndex":"0xa","value":"0x0","v":"0x26","r":"0xda99eedee485f9f789cc183307b139b63e0885c7135796fbcca1d20415fd884e","s":"0x5103dc4b2fe14ec65fe2c98c331cf9177ffee86a89ab5b8079a3ee285bdab7c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfc203c5f867be784726ef4198c0e8fc1313074db","gas":"0x5208","gasPrice":"0x4a817c800","hash":"0xaf654ac5eaecca624725c4236adcbee10a9b4c76f4bb71c893c373c659a4305a","input":"0x","nonce":"0x1","to":"0xa3da2a2f864a180297adedc48ad51e562d7a9f8a","transactionIndex":"0xb","value":"0x1e81bba24c058138c1","v":"0x25","r":"0x6e1989c52a8d07f84ad0701cc6eae4e9fbb2ca79476b03422098d03e52e6a594","s":"0x6d36b9c8ed63abab0ada4fd9c53541d4b948b23c79ae118cd2f205a010f2c0ee"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xb2f6b98129aad387041bfe8710bc1bf363bb208f15d49a482b5d15bbd13d1cec","input":"0x","nonce":"0x2aaab9","to":"0xabcd334c3504100e6d26d895c8c658e35fe515f7","transactionIndex":"0xc","value":"0xaf069a8a72ee91","v":"0x25","r":"0x5b5bdfabd8a099a056af2ecef44bc142aa5bfe7623a14505fc0c6f3f059eee0","s":"0x336f76890622529392f3eabbd793be3ec6367b31b65737d6ea2ebedcc934f3d6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x75814b803794e796a4b496765af343121020238e","gas":"0x5208","gasPrice":"0x4a817c800","hash":"0xcf257e096c2cd20debbb4608d00ca28b3c576b705de8109090caead53ccfab17","input":"0x","nonce":"0x1","to":"0xd0bcd02f598c2473395842d647011b6d1cdd0e5c","transactionIndex":"0xd","value":"0x1ee647737e6ec208c1","v":"0x26","r":"0xcd5de53b8c661068d31053854e4e562f276e8481cba387d6853910d415a8e213","s":"0x2d209a8658c9411087c389f3bdeaa9c2ff70eac8950f0b4db413fcc39a4fee2b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x8f5aae245398626bc162b47b862fa09e49190b38","gas":"0xbb00","gasPrice":"0x2540be400","hash":"0xb16f7c1b61134c155cb820d8f51d77e93fa7212c8f46be42dbfc8a3767d176fb","input":"0xa9059cbb0000000000000000000000004f5151785e03b47d0c6641872bb6b29b6de1b77c00000000000000000000000000000000000000000000000bbc4849990fa54400","nonce":"0x0","to":"0x888666ca69e0f178ded6d75b5726cee99a87d698","transactionIndex":"0xe","value":"0x0","v":"0x1c","r":"0x25dca29942900fe444e2e3e27ea41648d6a22947a9d8a38e11ae367b0a064d0f","s":"0x52e06101618b2fe1f3a845f4f39a3092016e920855be9c9b447e3d6828e1b263"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x22b84d5ffea8b801c0422afe752377a64aa738c2","gas":"0x186a0","gasPrice":"0x2540be400","hash":"0xf40a89152e66d51b54ae72df0712e08fd6c121fd1d58f7cbc38f63249a139963","input":"0x","nonce":"0x1af86","to":"0x444d80ab1f1540642d69b3eaeb790903cf4872bd","transactionIndex":"0xf","value":"0x53444835ec580000","v":"0x25","r":"0xebadeffaf6e5a8b53f482372e9b33db8c0380f4a21a388f499b0f0072e8e2afa","s":"0x455bd8083723fbb895f0fe62c02ad1882bc3daa76443e4a77494f984824e9c73"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5ee4fb7764e28e71b9d0ce72741d6df027b4a79f969a71364db380de686cc1f1","input":"0x","nonce":"0x9c5c","to":"0x3c13a69380e27bfd16a5bc5528f4c1d6cc4993ac","transactionIndex":"0x10","value":"0xbec8544eceac00","v":"0x26","r":"0xe7eb23823262f600e33b526a953ac7e32dcc0cf86d9f1febbf8db30edea03b02","s":"0x595d98353ad032557caf00ebe14f21ebe66fab85394a421d8bbd9a47b3ae6627"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","gas":"0xc350","gasPrice":"0xee6b2800","hash":"0xc0e565782181943c4697199214db1d21a535835b665b2ba771fbe4693ce52de0","input":"0x","nonce":"0x292ad7","to":"0x0fbb3c7bcac281b97f8a8a3292a026d67c3230f1","transactionIndex":"0x11","value":"0xb2e25606328960","v":"0x26","r":"0x837849bae28e40b752586ce7135cee1a4741eb3f68b089cb6ef4dfb4b6291738","s":"0x312d8f5e8a25836687d6eb69be151016074355ee5b580793111314daba9da1a6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d99c","gasPrice":"0xbdfd63e00","hash":"0xc092388bd2e7626c53e3c580b4a5d57de3442b28c97b34fe1ff68042b9026137","input":"0xa9059cbb000000000000000000000000cd2e8348d2f58f02f1859ecdef07d1ecf1f0ced9000000000000000000000000000000000000000000000000000000174867a5c0","nonce":"0xc104e","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x12","value":"0x0","v":"0x26","r":"0xec60ffa5508b41567c20a68f26df77c3de22fa3b11fa853c7562f693df12cc03","s":"0x5fff6d9220b4da3f68358ead8b782e52de0f2ae2def4c07e5d547d513fcfe80"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x34ee80fe753728be177a1e6ed5541565b2c94da9ac8fb5d16e7cc757cea3692a","input":"0x","nonce":"0x2aaaba","to":"0xfd15c258b4191b73c7dde5df066f4732e4392f7f","transactionIndex":"0x13","value":"0xdee2eb356bf15a2","v":"0x25","r":"0xa5737391f905649e6ed6604db0b4040e94aec8bc6ad47afcbb1f1cbd934a7dc2","s":"0x5a52547c6fce0aaf436c26033f92ef7542629b8cfad92a5137979f072f6371af"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfc203c5f867be784726ef4198c0e8fc1313074db","gas":"0x5208","gasPrice":"0x4a817c800","hash":"0x8c9d7cbc1629acab3c2b0a6423a84025e5bc11f15eec3bcfe2e224a505bdd5d2","input":"0x","nonce":"0x2","to":"0x42bd724618c19fd396b95891621e267968707dd3","transactionIndex":"0x14","value":"0x17b2a64c0adf2a073f","v":"0x26","r":"0xe40d950eeef37b63fd058ad8e0e9510b858ba5a67e033d99f89c9023a6fa227e","s":"0x791f7b441d70533f9670b7db0b224921944fea8820b5dfb2f06704f75872bea5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbe853e3717ddcec5f9d57ed55e6ec1dc6fa1e9545c901b52a156f7b1b9c9cd3b","input":"0x","nonce":"0x9c5d","to":"0x7cb1e28cf73698e0474bf1b7b98d01a8e71204b1","transactionIndex":"0x15","value":"0xf1591cc0b131a400","v":"0x25","r":"0xd96f474d79e265d9dc5bf6bd09c46b54a25627caff37ff549c726e0ea7812920","s":"0x7630e1a32cdd1e3eaee6c00b38d349dfa3048ccbc20431cf651a218c124c1ab3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","gas":"0xc350","gasPrice":"0xee6b2800","hash":"0xfaacce929d5e0f054479cb584dab3490770c43e616c3bba0c2f8bfd0a074a603","input":"0x","nonce":"0x292ad8","to":"0xda6b3b1bd62b06ca13fb37f660e8daf848b60330","transactionIndex":"0x16","value":"0x2e7c5072cf1e9e0","v":"0x26","r":"0x7d51a1209d5475564a4df31fef6d0a09c8b8aa1cc6d1c87cda42f02a58db4da6","s":"0x5ab60244b91d00e7d588151bd9f51f4fec1349c5c146b2178c2bca94610cbe3d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d99c","gasPrice":"0xbdfd63e00","hash":"0xff1d6ee564b1be371792551a5b047ccdf519e74f3d5513da008318baf6915715","input":"0xa9059cbb00000000000000000000000091b1053eb9486b0b63d44a5cba021c324991027d0000000000000000000000000000000000000000000000000000005981122544","nonce":"0xc104f","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x17","value":"0x0","v":"0x26","r":"0xe13fe6b5356d9abc156dffe6395f7b724a9b35ec58fc4026811241b03bad7a92","s":"0x33ae3ea46a35263b6d5e96574317c233affa15aea7d79209facbe88ce2eed013"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x4a2db708d569b49383b1d8abbff178b574affc87f879d57b5798904b52d0d4fb","input":"0x","nonce":"0x2aaabb","to":"0x029f13b14a1c4c65aa19f03fb12c0d761fc9e662","transactionIndex":"0x18","value":"0xb0297da2f04b2c","v":"0x26","r":"0xbad7b74d953063bb260fd27fc57c3ce40f46ab872fd44d62e30edd2a2da91e02","s":"0x7e513fa35422c73d96c51b455cfd09bd846ae5ea1f6047c6c84151cbfa68e6bd"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5fa1fc424acb1df5a2efe579d9cf301ee4b7415b7086800fe48a1fd2f4127fee","input":"0x","nonce":"0x9c5e","to":"0x1f70dbf8b8c7a47dceea01ffe6749382245fa10f","transactionIndex":"0x19","value":"0x1a21d8eef282000","v":"0x25","r":"0xac50ff5d7c54b976fb08d24e235a1ba4e611a017332e20747818b1091cdf3a2f","s":"0x1523cdd85db8b8fd1e6dbc29bffef1583744f5a5ed278a97999fe44642e6b77f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d9dc","gasPrice":"0xbdfd63e00","hash":"0x231bcf683e12cb3cb50d2979154e5537822b30974a3bf08596a231ae7ffde4e2","input":"0xa9059cbb00000000000000000000000018e3dfeaebe76cfacc75fd724e2c6e4ba140d56a00000000000000000000000000000000000000000000000000000107a24798c0","nonce":"0xc1050","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x1a","value":"0x0","v":"0x25","r":"0x942337149235dbe45a6fb9596ca5bfd47f3d48a49bf17980bb7a424203f48130","s":"0x673e537d0a7edc66bfb3bfd7918adc7541f1850cb5249113cd6af089d25a75d3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x2809c2c670b3a0a57ab0279e369f34972e8aa818743a7b462e6c3812b139aa85","input":"0x","nonce":"0x2aaabc","to":"0x54da15b491babc978b2a3fc31841911a12c5ca0b","transactionIndex":"0x1b","value":"0xae56830ea32b52","v":"0x25","r":"0x8d0aa2d9e685b918186da550d2b00c51a0c471fc78493f6c6427d69b5e25def0","s":"0x79e64a26af42c415adba3b41dd899d030d683bb0c2c18289f0024bec84a34189"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb38ef7a0d9f4ec185696f9328171e38586d5f0c0c725cb2b1adf8a5c8a32b33e","input":"0x","nonce":"0x9c5f","to":"0x55b840e722a5a73b34320a34c48463e67993c0e2","transactionIndex":"0x1c","value":"0xd923293ec5e400","v":"0x26","r":"0x71e3e7c505606dfd773f53badb0f2d081207cbea0000c288781a18bcd6b75c14","s":"0x264bb04158b749785485323ba868ba7ada155985af7951bf948c4fb35bdc0ae7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d99c","gasPrice":"0xbdfd63e00","hash":"0x7b3c92175534b96e35797ba00deb87f606edac372bd573f06ff6636140938f6e","input":"0xa9059cbb000000000000000000000000be69390fbf8871caf82e2b70a92a4f7a87d161c20000000000000000000000000000000000000000000000000000004b585bb7f3","nonce":"0xc1051","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x1d","value":"0x0","v":"0x25","r":"0x8863a36a60b2fa5a621cb01f1d80c324b519c8cd3bc3db559b47cc5e6777d26d","s":"0x3b5ff01f46e137f33f273ab3eaf3d6afb12959d19f8f01a9119d40fa9beb90ea"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x8f0b09787e0356ce6e2f43a2b5a15245137a0f6066a9fbcdf519e8df37a92aa7","input":"0x","nonce":"0x2aaabd","to":"0x863b65fe3b44db9f60dbace119fb08fdd4d2c62e","transactionIndex":"0x1e","value":"0xde5381edb9bafe8","v":"0x25","r":"0x61f134af94880a42bbfaffd277bbd8c80a6fc978e562dff4ca29e9c8b61968ce","s":"0x8a02c26b769e22e966d35d44acc175eb747f57bb9d3fa2c057e23b1529ba9e9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbe4bc2e52dc8bcb6df1a935ddcbd84958a1de639fbefe1da5ed829f8f4f4486b","input":"0x","nonce":"0x9c60","to":"0x585366a5ad43dc56ccbb54e94c48c6f1d931710a","transactionIndex":"0x1f","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x62674294331a2dfb96a2d7480331f18fe9003869e52f32f0a5b88a0094fbff63","s":"0xbf8f9286718f28e13473f4136b8e8989ca247db1075f6cc633fac869532e754"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d9dc","gasPrice":"0xbdfd63e00","hash":"0x3eebb2d806a9ed429d460178c89d72364dd35719d1865942234bdd70bdfb258b","input":"0xa9059cbb0000000000000000000000004c59f430c6ebadaad6ccd25f4b9eeeb8f7a22108000000000000000000000000000000000000000000000000000001029f447f3e","nonce":"0xc1052","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x20","value":"0x0","v":"0x25","r":"0x9e20b3b1429b5672d9f05a859633e1e4facb71e308924277811db2e3ebaefedd","s":"0x24803ead950f32f9863811c17f914ae9e831c48973183c036605d96750ee93a3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xc94b14d966d087f09dc1bab45d5684d5c1f00167a27042e48391c4b97dbec90a","input":"0x","nonce":"0x2aaabe","to":"0x872bad809a1b1ec9a7dd38ac4d7e9b19920a1faf","transactionIndex":"0x21","value":"0xaf0a678d3ca95b","v":"0x25","r":"0xfad929edfbe500b2be3dffed3b9ebe4d9662bbdd211ae388a1c05a693c0054d8","s":"0x69f5962685c91ce1559d9e350b6322539f6d02dfa824d5253f381fda61f8f663"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3cfa69cea575486acd281c7517bb9e4c74e6e8179065b5210b8ed06054a1c1a6","input":"0x","nonce":"0x9c61","to":"0x7d1340884d2b767da3e87daa3b59960c4e98b791","transactionIndex":"0x22","value":"0x17aadf094fd1c00","v":"0x25","r":"0xcf01d52255575cd6e8cc9045187c293bb950b56e69d152880fd672f026b71213","s":"0x131fe537936d809d1eebf72caa0019142e348d282bb59394f0a6c531338d95f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfbb1b73c4f0bda4f67dca266ce6ef42f520fbb98","gas":"0x2d9dc","gasPrice":"0xbdfd63e00","hash":"0x8e2cad0763aea7b8a1e9b45b394aa0b62343dab30a230948bfdbe19988da31ad","input":"0xa9059cbb0000000000000000000000006ccecb1bdbf8f464f2b58adb417d5a88d0300f0a000000000000000000000000000000000000000000000000000002388f52ea80","nonce":"0xc1053","to":"0x41e5560054824ea6b0732e656e3ad64e20e94e45","transactionIndex":"0x23","value":"0x0","v":"0x26","r":"0x12ceb52c978e7a7e67f58068def1924fd7a500fcace1c39840f19dfdef82a130","s":"0x3d3e4826ade71f3e9079b31d9b8942c9f4f0cfc09bcc1cd66a9fefa9f2dcc8af"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xd49fd3809e5349c4425c5712ab9fc2c69c825161ab706c1bf3179f30a4e8c5fb","input":"0x","nonce":"0x2aaabf","to":"0x959cd73ae36c115df8ee9d20f5d3101ff3181466","transactionIndex":"0x24","value":"0x17057457ca587d4","v":"0x26","r":"0x707870910fb23d9091244655fa4d6b317939f9e0011b89097ce4903f25ee6e8b","s":"0x16707cf3e313a11f694b881e1463322b07730b79f3133f74befa570fbc78ce78"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4c56dac6f3503162683ae12d2445155aa1f705bb131c14742424944bede67517","input":"0x","nonce":"0x9c62","to":"0xc567f4a3d18d42fc49a5f8c54eaeaad0cc0713d0","transactionIndex":"0x25","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xccb97060a133d58c8f40b7d2ecdba4447b19246f40a154f6e69b91368526f0f0","s":"0x5a6006fe0a064b9e378ee5f3ad329735f844b73b7a3837643737b9f02136824a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x90a0eba75638bce9ebe5554c4695fa9c25e95f85fa7ccb3ab134dddd24912f06","input":"0x","nonce":"0x2aaac0","to":"0x02eee5b2f34918340694c0aece742dc7f8ee0ff9","transactionIndex":"0x26","value":"0x161d70598349dc5","v":"0x25","r":"0x347bbd3db97596d8b48e281437e4038078582d6380ce2bdbe5621f2b04cd9acf","s":"0x9996abfaa8d6fa128c3801b033e6980306ec0185fcdf603b1ef425117023a54"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x448da8c7d24be59ec445f4df143cae6782fc194b1dbd61d07d1fbce99a525d2d","input":"0x","nonce":"0x9c63","to":"0x4530afe8ae24f91875b74da5fe251170177bcbfb","transactionIndex":"0x27","value":"0xc4a234146d6000","v":"0x26","r":"0x85303903f9f1301a6479d32cb6dea765c2a1bf114e59a50fb5b05e37a5b23631","s":"0x17478bce1de2c9fe6a984aeed9f831343376a145164c92277df4e63bcfcaabc3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xd3ac8ce2a58d2f93adb88cfcf9241e1a682f71f69e61e0da04f3de056c0f3f28","input":"0x","nonce":"0x2aaac1","to":"0x04bdde4339294d8a521a28dc696f2286f0acd3d2","transactionIndex":"0x28","value":"0x185f9a12e284964","v":"0x26","r":"0x67403bb19a16ff477d30e264e4e4c0b6664c220e43b85c89c1fb0459085c0362","s":"0x617a3affb24dc4d38376c3ad4d33e972b3721e8ceadb779151a81aac031641d3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x96f04f1c4a5d8f81e8f541871ca1661662fee633aad36c65089a42418bc5dc5d","input":"0x","nonce":"0x9c64","to":"0x14fc32d88632e190beb08c1929c928954c06e336","transactionIndex":"0x29","value":"0xc3d6fc66994000","v":"0x26","r":"0xc567df5c64232efae75e1285c43f542ea8834aa9459674391e59dfe258598bb8","s":"0xf47712241b38e13645d6b07f8e8f95d4a2ac79b98052f04841100341a3fad1c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x5723eeeb5059dd1f44a3edba5d51f584e8a75fc99633990f9aaf1e23e2516079","input":"0x","nonce":"0x2aaac2","to":"0x30d82cc8a274716b616e858e8fa9d2e7c0fe111b","transactionIndex":"0x2a","value":"0xaeaa14152dfe1e","v":"0x26","r":"0xae89dca52ea390dbca8a00900a19a3dd1165a02c4585efa702777acdf3f87115","s":"0x448a134ad23ee92f3674b827374977336d0cad450c341e4e3972c6cd67b2ecf7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa5e865c2964b73e24fede17686ef1df138230decd74fe82e4e39b1a0e0caf4d6","input":"0x","nonce":"0x9c65","to":"0xb29f1c22590d62d3b19eee1e10936263588cbf2b","transactionIndex":"0x2b","value":"0xb83e6e7e3cd000","v":"0x26","r":"0x1f479ee111fb49c8de1095073ab81fb8b048ddcccd272350f8ec4dd00a9ad22e","s":"0x2623cd338a54b042288111c855d915961c5941d1cca6489b46d46d010bc0ca98"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x52cd214a2ee626e53b235b9e87b443ab64c4dec4c45fe50a076d51df2ef6e12a","input":"0x","nonce":"0x2aaac3","to":"0x59ee98400e1456902ab7235d3af1e2fe08ccaf68","transactionIndex":"0x2c","value":"0x160138685419374","v":"0x26","r":"0x5a01a830c72bf2b2942c4f3b1a320117efd63d5e612edf4898db840cba35df0c","s":"0x3a5f1675cf8223cb3d72e226775d2ebe71c76cd0c07607cd747e9ef8edabe43f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5db68a27e4f85fbf00dca00110b4e276a70472b09a253fa0b7c480def7554b7d","input":"0x","nonce":"0x9c66","to":"0x662978339d457e3c5de9ac99177d237cb577de7b","transactionIndex":"0x2d","value":"0x14c9782ba97f000","v":"0x26","r":"0xb244055b1b5e403b97f5f6e34e63b3726f8e5edfecd657895787157b6141e4fd","s":"0x4fab23be1914b18772b54af940f55c30dc6b944ab7c289381c48f2e1fc3164bc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x3c00053e6b0cb4c2c82cc08df1de2886c527bceb37400af19d151c779b691ac2","input":"0x","nonce":"0x2aaac4","to":"0x1060044fb45772fdb205a7880bf10d98b3faa010","transactionIndex":"0x2e","value":"0x7203ddf4a7d9e58","v":"0x26","r":"0x61d38abdee2ec7eec8604f90900c110ecfb09c583433539ba09fc9987b6aa31e","s":"0x2d66a3034838de7aff0bda31653ee67698bde27a029a89c60f65ebc22a60739f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5e8df31f2e5ca74f0b9cc072bcedd6b1aa9c890aae72747b386b35653bde4699","input":"0x","nonce":"0x9c67","to":"0x2b3c2f34d384a84a2db92861ef766d074d5dfe76","transactionIndex":"0x2f","value":"0xe036e48b422c00","v":"0x26","r":"0x147dce0b15914b2a5b9f3d6aceb62efab94a0fc3313bdfafc75456b65a7a850e","s":"0x5ca05bd2af4de11aa5faff07586b28d064365ef30ca9374e2746a68496139cb5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xf29b1ee3b69fd803e6a4336e1c2878a369c3b7d26a899502525a3e0a3988b1b1","input":"0x","nonce":"0x2aaac5","to":"0x49c059de3c341674028d3c4bd5438695423d673b","transactionIndex":"0x30","value":"0xae22078638a6d8","v":"0x25","r":"0xc6dc245f7ead2b2ea13a7c521e681733cfaed11e3f96d563cecc7f84689db1b1","s":"0x1a2837bfcc1b8eb5195d795fcdc6804c68058ea0328b42cb1ca3d90f897bc8be"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xefe29afe3225aae766b3698218cdc2ff8334871d2cd3e5a73331e8351a01cc3a","input":"0x","nonce":"0x9c68","to":"0x5ab9c59a3924a89fbeebfb614660ef5cb1dc9b27","transactionIndex":"0x31","value":"0xc510558adcf400","v":"0x25","r":"0x730a25ff42566dbd6acf5493b3dde8dc843b0954bf6474effe8a9ff36cf3a7f7","s":"0x29f4d2b0d9a042604db2082c527c42b0c12379e4b018630878caffedf5f1c8f6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x006a5d2207ef79083b3de8cc384fe4afcd78e28ff9603264eb487553292334d9","input":"0x","nonce":"0x2aaac6","to":"0xd97a422673e9f08c3a48c77fe2d880083745aba7","transactionIndex":"0x32","value":"0xae1e77264ee623","v":"0x26","r":"0x78e26d0ec880a8abbd47750dc27189756cbb45d097201de5524361b5dc1d6d4f","s":"0xe80f78a08e838680f1178a00c49750c6af34c0ff211c6472b22b5e65710b13b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8d2a63ae663da52ae3bbce4b0b193c806d920775cbfe78f1a9e2ce5fea730610","input":"0x","nonce":"0x9c69","to":"0x79e53465796e3ed6e4cfbb6108ed5dff81319a3c","transactionIndex":"0x33","value":"0xc96df5268c8400","v":"0x25","r":"0xbbce5c139e0cdfa424dd768acc1bceda22f89707e186987ea5cd652c541ff63","s":"0x3ae7cf7bcb887a14113e91574067abf179268084a6e4bfc64c97465fc7608532"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x8ec819436b821ad573f6a1fbed2a549cb8352c0035916fbfcb0cbbf007cd651c","input":"0x","nonce":"0x2aaac7","to":"0x1b9e602c4cac19e87b5faa3774414f54e362cc94","transactionIndex":"0x34","value":"0x160eb475460c2ef","v":"0x25","r":"0x9c67f12fd81232cc9b4f35fa39a5869efaf9290426a5b707e43373f2b78e726c","s":"0x14fff7e4a5d2fd57046c32273300541d87b1b8fdb89ca1f6e29083d925e29cdf"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0f3cda751fbf72166bf419f483ef93fe40d4eceef994330d78bacf0ed1ac217e","input":"0x","nonce":"0x9c6a","to":"0x1c01da024f8674268128229b4486282e3091218e","transactionIndex":"0x35","value":"0xc3d6fc66994000","v":"0x26","r":"0xee64ba98405ef13c1046e20add36f83cffba6ec663217dcbe16cdef00866d781","s":"0x4353e70604753d5df5414b44949e6d5d3b0099ac9e908d3f386761a08dcc7681"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0x7b065e3308d58c1509f1af243bae91e6bf59b3af923b90089da3723d6ec0fd29","input":"0x","nonce":"0x2aaac8","to":"0x24702bcaba2cb34d081740605e57b1c0247fa668","transactionIndex":"0x36","value":"0xaf8e4871185ee8","v":"0x26","r":"0x6a3a5d089e0e69fac6406684950d7f8565ef20128d1bd864a2f885e70c45db67","s":"0x320c30498d3aed57d6549a4d89c96e5f35080177162396178a2c5bd7b465143f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2a06d6d2c3af82096cb73bf602258342876c73b5072f7861b7f8abadafc28385","input":"0x","nonce":"0x9c6b","to":"0x6860e92acb529568c2c529db2e418ff9d39cb1fd","transactionIndex":"0x37","value":"0xb48cc1d8b16800","v":"0x26","r":"0x740010af0df82d950d2e77c857bf35b394573092008920faf64447a747eedcbc","s":"0x12b85f4e1dda634b7412f9707272036fdda220d5e1ffa867deda3231c1ff4945"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xea674fdde714fd979de3edf0f56aa9716b898ec8","gas":"0xc350","gasPrice":"0x4a817c800","hash":"0xfec8c03831f0a5cd907df0ba7e215ad87762b21771b1fef3ad324ad3825f14bb","input":"0x","nonce":"0x2aaac9","to":"0xba0d3ca997f8a5588dadbb7ce8000ca8ca8f79d7","transactionIndex":"0x38","value":"0x162ee6572dc409a","v":"0x26","r":"0x9f9c5920aa859759ab112d6eaf01c03bd4f8d7229224160d30446217f1ffa66a","s":"0x736877ecd30dbbc288f4f04e0e71da02f2cbf2abb52cc552af92d32fdd07089f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xca44697c858a5c081db2d5d27f0b89f30e8c4eaa92d9405cee3dcf674594753b","input":"0x","nonce":"0x9c6c","to":"0xd80e0dad2034dafbf1e56f9fbd9cf05e6d8f385e","transactionIndex":"0x39","value":"0xbfd66e5a367400","v":"0x26","r":"0x2b93cf57287f3ec365155ed3f511e4a653350e97ee21007de2f64f87821380a","s":"0x326f442a483cdfb9fceeefbefa7433bb2703cac555b583d22551f03b870cfb41"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x63cab64fa2fffa46dceed134e9731d0b54632002fe2b72d661fcb45a924242da","input":"0x","nonce":"0x9c6d","to":"0xb64b2a886be9164531a186a8031606361380c1a7","transactionIndex":"0x3a","value":"0xbfd66e5a367400","v":"0x26","r":"0x101551c907ae74aa1d49a3392d960b4101ce8a4ef7faf18c73cafee1fd81dbb9","s":"0x51d110c6cfd780fbfa6c02dad32bac18b734d7e7b4101efd3f0611d086fde41a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xec7220d4e4722386270508e0714bfdcffcd66475453ec1ced9c122bfe7fbc24c","input":"0x","nonce":"0x9c6e","to":"0x44b889082ca7cffa9f91107110754fe0abd07205","transactionIndex":"0x3b","value":"0xb5d019cc00e800","v":"0x26","r":"0x2e74c71007b9d74d9fa4de92f2c352275c0f8857883736d496388eb8acb2bc34","s":"0x63324a97cc0a246cc4901f9ada5ebf3c4a3c97b3b0697ae07b1370ca717cbea9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x33ded543bcc21f070d6e24f363bbfffffa8b8c39198493fc11252e5df2911e5c","input":"0x","nonce":"0x9c6f","to":"0x9257d8f0bde62f59f2d982ac4cd534e07d9dd345","transactionIndex":"0x3c","value":"0x17c1adfe0b47000","v":"0x25","r":"0xb1105d9b6f6a5382285f9ee15710d63bd484657b6f4563d1c40d83abdb401e12","s":"0x7ba86b5c18900e078abd585a6e63c55d9cfb51d093c4963fba6b5349f0183abd"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x6db11488011ec8e8820654a89b2f5e0e8b07e32973c5e2089f3d5f7065c7d181","input":"0x","nonce":"0x9c70","to":"0x5815bedf684599205589c23760509fa9c38a4703","transactionIndex":"0x3d","value":"0xbfd66e5a367400","v":"0x25","r":"0xadcde1c993ef446a648fe2eb469423418a993aea2315aef7db0040e703aa0e48","s":"0x695fcb0eed75e2fa344b896b0fd5e1ea7e1d2ddab9907a15c1f0d6cd48f29a49"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x30597ea097b887c60351a77a1efc12cd4a4fd2ffb7aa49564644cf43b8d0db9b","input":"0x","nonce":"0x9c71","to":"0x890910ab2c8f838de49a882235c1abb73e79a94b","transactionIndex":"0x3e","value":"0xd10ec777941000","v":"0x26","r":"0xb7669d6396e8abcbced7c20f898446ea3ce66ab6eef939f96dc104881d2ba4a9","s":"0x16a4f13c73e5c0f4885951413d683d59b8f209067e16b4c645814dfc60081ed0"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3668733911bc9d75cd2ae0f7ec09c7f4f8a5cf979b57d44e718e92a20182358d","input":"0x","nonce":"0x9c72","to":"0x1fbb1f26b26379d9cf4a3fd152df619bc61aba0c","transactionIndex":"0x3f","value":"0xbfd66e5a367400","v":"0x26","r":"0xff3292258ac91736001885ceff8c7ed619af300f91e6abfe4e4386baad893fd1","s":"0x66113adf45b41a6f34cd895b3aef90c8d12be07e763abb0bb23d90c3768fa4b4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5357798120a3efcd659e5c3b6a075bb927aee3cc1d2bede1441bc46717fffeae","input":"0x","nonce":"0x9c73","to":"0x1e3b979311a69a5e4aaf257d2887b2340b23e5ed","transactionIndex":"0x40","value":"0xbca080a4a2e400","v":"0x26","r":"0xdf1b455d46909ed9ad17a630f0bbe1ccbbaf2c6c67639d2235fb4b5f8516f3de","s":"0x5b848302ed3867c09bf756859d72371154295e0ede66432b2e56adbae7e2c824"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4b02dc4da6b4c08222040ae4f3e1a79c0f8fc12f84134161caf188119c82a775","input":"0x","nonce":"0x9c74","to":"0x52f7aaf6429f28359c594831dd720906e9822aa0","transactionIndex":"0x41","value":"0xed90cd1676b800","v":"0x25","r":"0x3c2ead1b59d5090c0c671de8cfc2e68b1df523666f308eb1bce172b4aaaf8189","s":"0x168dd2296d99af982ee467b214d5fbdfb5d3bda5833e98d4a3c2508938a605bc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9d2338fb32b44f71d384510790c1523342b00dce554f089cdc1b76c11cbc2ba6","input":"0x","nonce":"0x9c75","to":"0x5ce8433eb2b8411bd505ee4be968751aa8f3748f","transactionIndex":"0x42","value":"0xe7962d1595e000","v":"0x26","r":"0xf71aab079829b5d26ec7e66ac88a068bf212c5f3c21cfb9fc56adb18429787e8","s":"0x28804ef7db35b88adc0b0d5943e7923a92b21e9df575a5214859f94d085dd4b3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaa8961638349e54a3cfe762e88df9a0c81801083ae67dd8da1594d59c2e7dacc","input":"0x","nonce":"0x9c76","to":"0xbb585a66faf023a157067aa4a5b9d704945686b4","transactionIndex":"0x43","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xc0e6c5572dfab3dabf6ff6773f20dc1d6088390e4a8aabe2673ee582d7aacab1","s":"0x28f11928e0b87f0fbdc189ba1098c0c2a3935c73955658f28c68772534cc1cb6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4ddba646404a84ce65c8566f72c52019faa62e3daee934bba7ed65dba0344d96","input":"0x","nonce":"0x9c77","to":"0xfcf8483d73472d9fec2c3daf98b05618fc5f659d","transactionIndex":"0x44","value":"0xbfd66e5a367400","v":"0x25","r":"0xaeaa50298fe64ddc28ca9e4e3c292bd7f31acccbbaa8e83a90e26f0d3e5aa826","s":"0x136c478f5a0534dc5aba89bbb597f65a64d54747560bd56e00a7d2ec79b88b1f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe3dc71466400ca4406b73dc9d37360752b5399949e758004c5898c6c8dbd19a9","input":"0x","nonce":"0x9c78","to":"0xecfee0a3eee9ba6daa6ac29e9c0cc18ac4302f5f","transactionIndex":"0x45","value":"0xc3d6fc66994000","v":"0x25","r":"0xecc5896a0b0cd9dd48efe7c4d014be27c6598205e89a10b803a0f744fa9e9618","s":"0x6190c56db4119fc23fa85ab9f2932d0634682dc472715fbd07919c4dda06ecff"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8408dd887fd59a64e665de856b9815f4b020a6721210a13be19eb55c5c21eead","input":"0x","nonce":"0x9c79","to":"0xc52478f306bc7f45ca93f26ec27b03e03eac7c45","transactionIndex":"0x46","value":"0x2a7700844a13400","v":"0x26","r":"0xcf05b89ee3b870440ee0dcc5810ba8818e43e5eaf300f0d078af2579871177cd","s":"0x6c2ff2f96d8239a18b581efbb38da45fa648c27a0f8a709f20ca017a0121c43e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0c45616865e3111fce61c7f9100d8f8a76ed13ca137b9a3c5b44402c8e82ac50","input":"0x","nonce":"0x9c7a","to":"0x9b49fb099165fb5eb966d2999e04bd3f6f175bb0","transactionIndex":"0x47","value":"0x6b7f99b36c8e400","v":"0x25","r":"0x8c9021e0e864d0e874386aa25fa7dfa2316077327f3672dab7e7b5c343af47a1","s":"0x46f028b207e2dc03a5f0116b07e4e721abad7379e8775c861fa1ef5d25d84b1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0a39cb1bbdd38b2a94379ee9b22fc14c8f4d3374c49077bab4cc48ba9779a02e","input":"0x","nonce":"0x9c7b","to":"0x25b672142b7e4f0d28cdacaf94caf4f4ea34c09d","transactionIndex":"0x48","value":"0x3b6432fb1c31800","v":"0x26","r":"0xb9be3c1bb492cdb18d6d50899a3adc0ae0f332584eae98e1049cf3b1096fcda9","s":"0x74bf6457ca137554ddfa6fe9a86d0474bfadd0c83890d7feb226cd79c7ae0de3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x95208af935d245e659f146820af71ff0a7fbfb353c4fa32823e8cdf4062e6dd8","input":"0x","nonce":"0x9c7c","to":"0x55aea382d3f06b0591a12a1b0dfcae08d6a5903d","transactionIndex":"0x49","value":"0xb26646c5657000","v":"0x26","r":"0xf622164cc9bd21c57f1417089e45fb64e589f32663db953cd8581f7d51acbe7","s":"0x10633d8c1ed7597f94e3ffef7d2cea86b1961193cc89e00275ed99fa054e15be"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xad3b5298c4aa0a1ac2d3c5d680214626d69887d3127d5883cf306f02604d9127","input":"0x","nonce":"0x9c7d","to":"0x493c979945440205866ed35bd7df2284cc5e8aef","transactionIndex":"0x4a","value":"0xb81dc0e359cc00","v":"0x25","r":"0xa82e22f5756a82153ae1c457cf16f74f49f42d07a585877922462deb4409e394","s":"0x2b7bcc0575ad15ae9c6bd8b61b62548bb9e4a8aab41c67dd95a7fdda4b117934"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7daecd2bbfc31817012c988b1325deb998bebdf643a3aeeeadf302a534227f24","input":"0x","nonce":"0x9c7e","to":"0xfd47827a6bff38abdc3fcacb145ccf60326ffd1b","transactionIndex":"0x4b","value":"0x17c1adfe0b47000","v":"0x25","r":"0xeb65fe7953e57784d2607de0add1aad78fe5365ba4eb6ba323f0d28550095440","s":"0x5c04a96968949b3dbdd1ec1e7bd83b1f186cc96b5ae3a394cea9adf6cd53d507"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xdf5b469afc9a6ca28bc7be614fe46726bdd93b069cdebc856f52deff0e32f8f4","input":"0x","nonce":"0x9c7f","to":"0x416e269cc2bf8f9cf56cd70038c0714bb2fb2223","transactionIndex":"0x4c","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x51efedde07c47ae99371c25ae1474c669cc52b100f0ffda4be4936e2892b9331","s":"0x53f6f325d1da57dad6ad2cdd961fc67dfce395372dd18a7774337138b1e2dd9f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7c9ef0fb0cb6c77a338310f8fa497f2af24dc03bc9e05fd5946c2096603127d9","input":"0x","nonce":"0x9c80","to":"0x6fda165e0d011eaa77f70e24bf515abf4338ea21","transactionIndex":"0x4d","value":"0xb2664919715400","v":"0x26","r":"0x8393b13618da6fa0a79851675d230d53f5e32db404f80ecbd319049cac7ebb7d","s":"0x5ffe6c3a035ac49c22e89b547030c2384896b6cf09a90a7de67114b15ec81f6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8a6d742d1266639c3ff41ad8424d8e5632ed7cfda5795933f05b9c117868a9d9","input":"0x","nonce":"0x9c81","to":"0x2e4689b51bf43fdaf874f3baaec1b750ad15f45d","transactionIndex":"0x4e","value":"0x27ac67bbdac0400","v":"0x25","r":"0xd22d20eded3b91d1842bed217d4e6dcec8c1b560114963d8b2eee281b4686bb8","s":"0x15e26c42245398df1b6f64927c88081a9e692e18358e9d73b6f3c28da44dca63"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbae0db1e3b4f15e0dbeadeff006bc099f72c33cb642077d1825ec9e3966ec572","input":"0x","nonce":"0x9c82","to":"0xbd822e7b7db725c3bbfe7576e24d3c0354497981","transactionIndex":"0x4f","value":"0x17c1adfe0b47000","v":"0x26","r":"0xc0c0f50432bc3e6d02e68909742a0a344cc4f593b548915d5382f4a0899bd868","s":"0x76a0db87a98089f7d29830934bf1a42f6ba3e4ba558c86768f2e08ef8ba808f0"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x83b64144c19654f052676ba7c78771f7121d933fad2ae0be8e950d5b99e16f73","input":"0x","nonce":"0x9c83","to":"0x2d322adbb9984eb45d07e5c219e325099420183a","transactionIndex":"0x50","value":"0xb20840bd382800","v":"0x26","r":"0x3df40d99f3f47dd3b6d1be21e466f765d7b3f17cc8782b07542c7ceed3408057","s":"0xc0db1dee0f544135878b3fc6767b6034d3f6dccdb113a1195a781f234f91e6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2e630e16782c85a6046333c8d046004c60905a1509e56a9a3ef8d2a87ff39340","input":"0x","nonce":"0x9c84","to":"0xdba59dd839fb2d3535802e6d187b72c6476be686","transactionIndex":"0x51","value":"0x1203212e37ba400","v":"0x26","r":"0xd15f940513577217deb4921cd4875b55e5c236135c1dee2a161bd13bf489d4cc","s":"0x53ace39ee25fdf63c746c6084ef0b2e53b8f9a10b364704169453760a0e28124"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x95268414532c05cfed0aef91909f68b4416251cd21999e47857561557a33eb08","input":"0x","nonce":"0x9c85","to":"0x686dfcf430777442606254a0e36f4dad68ac9292","transactionIndex":"0x52","value":"0x360f3a05f77a400","v":"0x25","r":"0xcfdcb39b9d026e5265bf2373fbefc27633c97dd65865b0131ea353d971f78c7d","s":"0x5ee707a379ae0b4e7c2566a7034de41cc9e7fa6879db31498df02763a1217204"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb49e13713a8ccee95c78b26bdbc900872de90608b44789ef721910ec74b31f12","input":"0x","nonce":"0x9c86","to":"0x6c429bc1c51930f2c4b5e02dcf7c01e5fbab1df7","transactionIndex":"0x53","value":"0xb35229ba10b000","v":"0x25","r":"0x8afe1f6dd3247bbd388f02038524ae92c93f8a418e5e02ca6d4a0d1ef29fde49","s":"0x257449addbe86c06d81f31057f2a4c39a954110d90873ca184d4eccbbcd7776b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb109ba1e2415021fe64320fdb1ac4a130cdf38f1f59921f68aade8f47f23db3a","input":"0x","nonce":"0x9c87","to":"0x9b128e46a15545ef9656806155f940e3466308c5","transactionIndex":"0x54","value":"0xbe31ef6ebf4c00","v":"0x25","r":"0x5079c8212f9291b36a1d9052e6c04412925770ec63828dfdc07c7c17a3a90cef","s":"0x38ead0e006a6e4a7a9e4fe58710cb5b08d388d8fb3fda9195ac799c0e2ebdcb3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xcbb6fab536358150be07d80ebb21d2ae0cce0c8315276b837667ff8ba1c42d54","input":"0x","nonce":"0x9c88","to":"0x58cded315eb642a8806a0327a505dd04ab3e5774","transactionIndex":"0x55","value":"0xc4a234146d6000","v":"0x26","r":"0xde626c5dae253d07b126b37b53e43a2280c1de5fe5bab9dcd335f232dd1035be","s":"0x3beae86e6665767e70196ca3442a8119194150d855b7a5d710c22bbb2f45b8db"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe6e296227aff21dcee63357daaee930a262b8d3de5272889774a3ccc78bb09f5","input":"0x","nonce":"0x9c89","to":"0x55e425eb13f8f9d3ee84da9ef721223ce595f427","transactionIndex":"0x56","value":"0xc1a2d5e17dac00","v":"0x25","r":"0xe6fd8d422bd3fb8ce8c3c2f45f1bcd830ace8c3d7d583eb46ca3e2e319e5fa0d","s":"0x42f037accaf12c030392819efebc9614ea8ff3b950f6b35b85aebc1ab8b5dfa8"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbf934a74e1a949bf6630dbae24c0a5e1ac655f798914bbba2b276d756a8703ef","input":"0x","nonce":"0x9c8a","to":"0xa31fb325f638ce6f900d07159d036079ae7a1888","transactionIndex":"0x57","value":"0x17c1adfe0b47000","v":"0x26","r":"0x3afdbe081ebc912730ed377fed0917bf3a7512c6d12591262e02aaef583b15ce","s":"0x2d7f01ccc1a049ec0fc197980acc3dc80accd133edf4b1c2125c9a506a78c412"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4f895c2f7db9d7977aa003a04448ef070b07e558366c9ef7fc4101f4c5d00f63","input":"0x","nonce":"0x9c8b","to":"0xb7cc039691cb2c51b3202dcec8833f7294adfe54","transactionIndex":"0x58","value":"0x15f98da41d1c800","v":"0x26","r":"0x1520c62dbc3689f64d70fee49ab384a7c98663396618135783dceced04949218","s":"0x5b833f924dd7a046400b82ea2954bec85b63ba7574e46c5301024331d5417150"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x89ef049ce110fd411ae6c8c54e2533d319187e595f5f3945122eaba4e9b427a0","input":"0x","nonce":"0x9c8c","to":"0x2687cd65def8af50e18390199f6e97b0ba72dc2d","transactionIndex":"0x59","value":"0xe4101efecde800","v":"0x26","r":"0xd3961e8f1a2e38c8d75418233e314019eebea31fd7a8cec038a9ab5b7255f857","s":"0x3b5747f6c422427c2353309982c9a625d5217d3d76e0990afc4cabf871cf39f9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1f07df926060bc3230dff2458fc219b979f6477f3776d427da441d46bce8f95e","input":"0x","nonce":"0x9c8d","to":"0xf164395df8e000dd4a491be5111952280b2b223c","transactionIndex":"0x5a","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x38f3e7926c67197215a0cfead5022d8868c8b63d8845ac01970037b28f875f12","s":"0x429a6f8ee5d836ceee89dca0f7b0f320c46f565564ca751e14016ff25808fcda"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe335af1cfe6732b34515d2cabf4a00495620726620352378864ad80734e0570d","input":"0x","nonce":"0x9c8e","to":"0x7610640b90b17452501bf94fd8e8f37bc0adfe62","transactionIndex":"0x5b","value":"0x15e55d178169000","v":"0x25","r":"0x13d75120136fa3d8e604aad3b9de1ce1817508db8018677a982dc4e141e18f6f","s":"0x688869e08f498ba4aa3a701c6c15136e96f09aa2ce93e0b8e932074044ac95c8"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x541eb3a6b744879dc009ecc18f38854f587a48fc6c9d27bd71ecc05808a373a8","input":"0x","nonce":"0x9c8f","to":"0xb1a599d720d092dd00b53994ecbb30cf765dec36","transactionIndex":"0x5c","value":"0xc2542436fd6800","v":"0x25","r":"0x9df012b2523eb9f05084b0b215d65e4491afc3f1e526d77e08b35944b85d2cf","s":"0x644b5c2b1171871ad1f7b9a9a4d4273a08b26897f3cc45b9e325e2be48e73044"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xcb64bf354dc6953f8fefd125c52c6a28df664607d8705b51e412de57d61fc782","input":"0x","nonce":"0x9c90","to":"0x1559563f25677581d36d4e624473cbbf73e15180","transactionIndex":"0x5d","value":"0xc3d6fc66994000","v":"0x26","r":"0xad7031b60b01849774d08381af4a65a3dffde85eac5df96040f008bbc950cb6b","s":"0x44fb8a0a9b3d3f26d548ccaa209ddd3b24d1ba549bf60719e451ba780e0bfb29"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb5f62b55faaea308eb18733a19556e2730ec3e9f18f8ac6be15af6e46899837e","input":"0x","nonce":"0x9c91","to":"0x4d314bab18394b57c359639c876ec5ec6a377fb3","transactionIndex":"0x5e","value":"0x5b414595a77c000","v":"0x25","r":"0xf80db29fc81d5d80c120b363f2321b092de2e48bd2dd254a2de0c6e6b33bfea4","s":"0xf7fdabddeb455a59822caa8242f006b1f39235c8bea947fa1a98f04d15ab37e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb7e77c3bc9ffce6c6657282147030007578f15fb0c2b68bf46946e04f381a22b","input":"0x","nonce":"0x9c92","to":"0xbe007fabe0abc3da8b05e1d6ea261056678b8a2b","transactionIndex":"0x5f","value":"0xd10ec777941000","v":"0x26","r":"0xedd33b9aafdbf64b01298fcb08376dec064cfe65d31ae2707d8ba14774b85bca","s":"0x57caf3b2edff6170a338583b5667f1bc83109bf89b774eb10c5ee19a35fcc81d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9de4222cf2a3f10d6fca1729ac7d1669ca981fa4a3a2da22cbfbd98b394d6707","input":"0x","nonce":"0x9c93","to":"0xc3f8a457c2653306e03141fe75a9877493dd7343","transactionIndex":"0x60","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x918dbce8ebfafe208ff78df2710e99f3c0f2112a60027787a0af8fb495d8454d","s":"0x52fa55ca6bbc1cd081edc5b99f4ff131c6166ef9c1752154b59683ba3235f4de"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xad0546ceafd2779a6749d6e2501eb69e291bafb0830dce469eec76cfea70a773","input":"0x","nonce":"0x9c94","to":"0xb769832eb660e512e07258bcc36a0dcb76efac35","transactionIndex":"0x61","value":"0xbfd66e5a367400","v":"0x26","r":"0xa453717ea557e0951f5ed4d1b1afbb9887cf4a5249782ab9cdca467d88e3b0ec","s":"0x5cb9307f135e689c1c5d6573d7f1eaa7517ebbf398673c5fd853716c7dc0092a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc9bbcc2bbf50c6222cf213528617fb13a490ee05581aa68313d206ea1519b2df","input":"0x","nonce":"0x9c95","to":"0x571eec232518d5bb640abaabb4a0dc90a9923fb6","transactionIndex":"0x62","value":"0x2992f07c93bc400","v":"0x25","r":"0xa04da77da585efc49ff19dfbb002379f48bbdc76fa7b7ca92b49c80eb89b951","s":"0xb1dcad3506d3095da8256d6516aeb0f08d28342e5721f85634ef796627b2a7c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x39ab5625f2e3063484f3b8576f4f3e14c5002341f9c287df9b438e5d8fbd0060","input":"0x","nonce":"0x9c96","to":"0x9d34d6f0b5632fe1a5103eff1b051bcedb4ff55f","transactionIndex":"0x63","value":"0x14c9782ba97f000","v":"0x26","r":"0xe8e7a27dcb4295c3177c50a8516e72285bb27f4700508638060009e22efcafb0","s":"0x39733b86274675763eb8f8ea5015d6f37f220fe3bb86ba088428e9c639c4861c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x160c2bd753685879936c491123d8ed1b6ddfb6c24fac1957a7d2ffc83228ff90","input":"0x","nonce":"0x9c97","to":"0xfe1d3a10df8ec413d60ddbc5f864372785b15a0a","transactionIndex":"0x64","value":"0xc3d6fc66994000","v":"0x25","r":"0xf4d4a11d1ac2380662544373f650b4501357b6938f46a8cc511498e6f9af2fc6","s":"0x5d79de1db6e91984fb9fd0afd231d9c218fca8565746b8bf562c5275c82633e2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbc7636268fa7d2e2dbb0a55f27891941b8175ea87c0ddbe81e6c2af867279ec3","input":"0x","nonce":"0x9c98","to":"0xcd865711992c4ec65c6a160b53c89a7d6ac6ae7f","transactionIndex":"0x65","value":"0x31a272005eb3c00","v":"0x26","r":"0xecd2574b39a2a580e8d3d1471d76001cb926af5e644b6ce99625d5509b534471","s":"0x4e5ecf8ebdc96a1aacefee24f842f45d3a0e26104c75848c3a1a4eba1b1b97e2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x937bbde3396f50bd58b228acdc6075099afe6abf9e4f1cf6ca6bcd70f5768f80","input":"0x","nonce":"0x9c99","to":"0x1a31a3cfd3572351a03e7b28a2c31560a918952a","transactionIndex":"0x66","value":"0xbfd66e5a367400","v":"0x26","r":"0xe26c33c48e8d86df5f1f518bf3d1b68b56c589afc6874836b2968881708b980e","s":"0x1979c6cf8c46b224b55e0018d1fafdf7fe8d8623cdd50b648a83b019ed0806e3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb03550a7b57e201b1a2fd1afb376c66e6bfe3425dd948b89d439849939899e57","input":"0x","nonce":"0x9c9a","to":"0xcc2171d4de600277075fe130e0d36ffefa99b5e7","transactionIndex":"0x67","value":"0xcda1be8c933400","v":"0x26","r":"0x1bfd0376436155b78ebaf2124d9d0acaab4dc2067814529978235d03f8bb5ab2","s":"0x54204e780711ae4c4ae1b7456280fb14973308bbb75e830986430f1f291bc53d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x99e6d8bc383e246a6a7a294135344f16346b53eb9fc228da27aff8118e99d4f6","input":"0x","nonce":"0x9c9b","to":"0x92b264dfe333e5f73122225c41cd73db8cff9337","transactionIndex":"0x68","value":"0x1cbed51d319ac00","v":"0x25","r":"0xbca9dda64074c1b01225e1a1bf5d2f6e54ac94ac9c014fa17987815f9dabf8a5","s":"0x7065c3e426f83910d6e4401c877c071ea94cc3e4393b2fa822d637ac83474348"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1fe4bee972c52aaec26617e86fcf8758eebbbc98b952a8158247af139ed2b54a","input":"0x","nonce":"0x9c9c","to":"0x4ca85ac8e93bc77355db733f4111bb09c345091a","transactionIndex":"0x69","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x42eda4e90e20cba06037bc795dba4c76da79eb3e2bfdcb1bbc08287925816974","s":"0x5b10aa514cc2c1e3c517804ac123e38662ff1a1a67e47b840df5304c2a2af2f7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4597183867eeb0b2195d6d367dffa37c25aa46aff4436b7ba225bccbb3579c7c","input":"0x","nonce":"0x9c9d","to":"0x2b1f68abe6a29b3edd64ceb21ef29158e52590c0","transactionIndex":"0x6a","value":"0xc1da8171cc3000","v":"0x25","r":"0xb7b87b68455e7cb5eb9db18806aba977f6f939ac144bd569da37395d806900e9","s":"0x502a37059a0e7b96840e290676ce5942ecdb1a1aa25757fdd56d7f66976ebdc3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0bed04a6609b66a5d8b6bd6ce40ef5325bc4c696aeb37776d4d83ec8e7ecd961","input":"0x","nonce":"0x9c9e","to":"0x7924e5578215cdff5f181b64da2927923af16260","transactionIndex":"0x6b","value":"0x14c9782ba97f000","v":"0x26","r":"0x572a3bc3e383ef8bff21c48de4073a88500771cb36b898fcb89dd84522def105","s":"0x7ad3f5a4329166326649743f6ed25a3b2f2556464e767dcb4c36dd837b059ce7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x73c10857457e3f5c45895d9a77fb438b3421eb7c28c26789e2c9cf8151fb9cac","input":"0x","nonce":"0x9c9f","to":"0x0253cd09335b8df37e1c5473ec99a6d70eec1766","transactionIndex":"0x6c","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x3275a10bbe9666457ea5afc4d59e675b0144f76b98663145addd4bc799105e6e","s":"0x5568e0f28186411f3d70bbc4270ab0ab61c08019948350a918390c0e281e241a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb9eddc2db16ff61f58001642ca2a51c8ec95ebfe9e5b036421370077137e193c","input":"0x","nonce":"0x9ca0","to":"0x7651952fcb8ffdf86aa45ba15cc5b17900e2a43b","transactionIndex":"0x6d","value":"0x126409b8e091000","v":"0x25","r":"0xa5e27911e785f9a70a759a769c71e0dca6cf6bbeae4f57c3bdffedfa1bf07fe9","s":"0x301d8a3cc91d42a32377755b8f59a3cb98f6cac73bf437a125a9532aa8d48769"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd31e51cf1dd441bb59f560208a1f623c8c46be73b64e05d4a502c24966ae2ecb","input":"0x","nonce":"0x9ca1","to":"0xd4f6efba0e8afac5070e2f212ea2399890c661af","transactionIndex":"0x6e","value":"0xbfd66e5a367400","v":"0x25","r":"0x25a991a9e975affade3700b25c8f643e0f5b2da33c080884489c0e9d08de74c4","s":"0x3059552205c70ae443d68470007e1df0ab8590f3bf8c3176a81ca0450a3d4779"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8dffae13ab7104649563acd462619eff57ed1c6aceff9b89aae020d377502113","input":"0x","nonce":"0x9ca2","to":"0xd0d6468dce409bab6c90ac104e43cbde0683ec0b","transactionIndex":"0x6f","value":"0xc3d6fc66994000","v":"0x26","r":"0x5f96592f3e82ca7b68650642d9db0f1ad1224a26341408e757c298b0360e83fd","s":"0x312df679b162ea5c7eeed6295bdb93362a03ffb3dcfb74c5012f9acfffc2b071"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x909401b08022a35b0e6bd1efd6ef2b9c3e29e29884f4358ec1047998e06462eb","input":"0x","nonce":"0x9ca3","to":"0xba8a931df397f5821766d764dfc1123a12725866","transactionIndex":"0x70","value":"0xb2664919715400","v":"0x25","r":"0x8703033f77bec9be225e4edaf8fd4c0067d1e94b4842f039bd872dda4b4f44a8","s":"0x2895e3d128915a86b138eadb90a669facd73fc1c0050ac7ee7091d212de08ed4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x58c48a7b652c7382cf7193760b16fed729c000668c5692e0d1185b7486c221ad","input":"0x","nonce":"0x9ca4","to":"0x4ee1bcaef4fbefa28184325e6a9c4a57d6c5bc83","transactionIndex":"0x71","value":"0xbca080a4a2e400","v":"0x26","r":"0x1d306f27cd242ed559942c8dc28da48f0d3aaa37e99c3ff64ddb3f58a7107779","s":"0x106bd74d4b7249b7c410e289892066d91e0da4b63581e2e9f93f40471bf8ed2b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8360665b9a5b6abeed5d63621ce4a22578aa3eb27090429b676db106de0297c1","input":"0x","nonce":"0x9ca5","to":"0x5d6290be073fcf27fd1affd5f7703feef07f3d5d","transactionIndex":"0x72","value":"0xbfd66e5a367400","v":"0x25","r":"0x665380256bac009ca3bd65e34d8829b417e9ad73e5b9994c875472b374becc07","s":"0x707772a8bae78c26f22f8375f34d277b43db9a1be118c3772e9cddbe76c2e31"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xba38bc44a84a1be2d3ef1b104d7d24b9531951587d8801f55b7e71f442ab303e","input":"0x","nonce":"0x9ca6","to":"0xae0a808e2a772a4302cd78aea2ddc3ba526c6ad5","transactionIndex":"0x73","value":"0xc3d6fc66994000","v":"0x25","r":"0xba3fd5e06b4460de11a18ed944efe58d89175295594d7130a2dda4c73b5f9f39","s":"0x20531064f3c4b9dfb9d7c2e08dedfd4ec187b0525a1ed5e965d748cdc29eb5cc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9333f58acf1bc7e92224104f057671998592a1909cd5b3acb9c12ee92b325f0d","input":"0x","nonce":"0x9ca7","to":"0xd482e0fc8213cb979aee9f86dd488da365019e5a","transactionIndex":"0x74","value":"0xbb0aad48175000","v":"0x26","r":"0xeeb8f6c5dee495a379c25a2e6f7be0f4779f48df8a112dda804af184f128260f","s":"0x52f8b6b9a51711a16437ccb853c95dff6099b00c7b30a04661b6ccd24e8f1146"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x34f3c1e3163f4b91dbb9a07eb139a6128e11638c944c688064601c1acd5b0500","input":"0x","nonce":"0x9ca8","to":"0x6254be074cd9a548455bf7b852b4c37b1bfe3833","transactionIndex":"0x75","value":"0xb3d90a82e2a800","v":"0x25","r":"0x3722cdea2984b42025e756114fa881d09cc234b1832bbfe5736f1a7c560b408b","s":"0x282ee2ac69f52de76906ce7586d6d1ae74173dbcd0a24a99f80315d414bfa74f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe50993d20c4c2173666f7407fe8a2d51dd4568f55f938427c7383cb528d7d9e6","input":"0x","nonce":"0x9ca9","to":"0xb6e4350b195042a6e2d614aaf2f55c2a250b5d4a","transactionIndex":"0x76","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x57542388d21ed1659704be1021983b6dd7e8c9969f8a3ae1bfb672088fd26955","s":"0x23163ad0713433796a3590e73d4f1c2975b55684e725506f806a25ee715e1f2d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x6bbf3a2ff8d375155554f2393fa9146a543d0a2d989ee879840c5210d6d8af9e","input":"0x","nonce":"0x9caa","to":"0xcf56e5ed5ae72a3073947495960fa7132e54b3df","transactionIndex":"0x77","value":"0xd3057bf2e29400","v":"0x25","r":"0x6b183cf8cd9beedbeb0a9c6d665f422c3e02fcad2e6034a0e5dcf4efb35110a7","s":"0x135376a5a6bc6d5f902c0111f612546166674dc9ca7872b971f7243d046b5415"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3d3397dc7750bef59af42dbe05cc0012b6155779f36d18e07bdebbe9503d4886","input":"0x","nonce":"0x9cab","to":"0x8de0498a27ba339552efdd739e9feb820059dce6","transactionIndex":"0x78","value":"0xb63eec35f82c00","v":"0x26","r":"0x58ba1a512c9aba3d9f34b170c2e4e111432c6008a553422484a762d4cf0ebecd","s":"0x12544bf2a888c125beb2a9301163294e3a7c041d3d2b109fcb9e4dc809d68614"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9ab6b22db7be7a6995a8c62b3b00a59ea441f62c56b9b3520a431f3c4555643d","input":"0x","nonce":"0x9cac","to":"0xe0344823f21a2e00f17a0afc808fd4c6e002750d","transactionIndex":"0x79","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x86cee2916626102013acf7ca7de60bac8d37b534664066a4a077454608527efe","s":"0x4012fa62f4bb99242ebca7a0bd15cbd8fcb3eaa3b23f7dc5a79900bb8cef9049"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x527d15925e495fe515e1e3367616577d7ec0744094d35bd9546827c33c0b5530","input":"0x","nonce":"0x9cad","to":"0xd4bba6144da7295055fb1b1d1dbec86da8b4d21c","transactionIndex":"0x7a","value":"0xea7b427a49ac00","v":"0x25","r":"0x67b6019a6422ed9ff8560ba76a46df47a0838139ad2db752682738753b6e84a0","s":"0x2711600ac97e3f070f9de07544b188b5875d14467025e981c02cff15bce86fd4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4d3d5cbc698fce23a2ffa4eda0e151bc0e6ae5d98629c9b4b77234fa22a30a5e","input":"0x","nonce":"0x9cae","to":"0x54801393c02e07ed8c5aad855dfb1cbfc8c9a9ef","transactionIndex":"0x7b","value":"0xc3d6fc66994000","v":"0x26","r":"0x35daeb020d4dfd39721785c2d28591e902e53ae245eed0ecdbc25ac7472528e1","s":"0x28d959e8608cceaf0342bf71bf0332bab49c67ba9b76597a136f79caf1a05492"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd0851fd1a3aafcd50ead7aa1e6dff1c9d2cd09ff4392264718d6d1b8ec027a26","input":"0x","nonce":"0x9caf","to":"0x2fb6665a77c8c6935aae38cc8cd63c79f4978f23","transactionIndex":"0x7c","value":"0x17c1adfe0b47000","v":"0x25","r":"0x9309016ed84c7aae11d7460539ef350906f7b3fe48a92be2571c9773873c86f2","s":"0x1b6dd64e9dc8701c39a17f705b04c81ff8ab46607bdc84c77c212cb293b74617"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x122580b9bf98702f5d63e9541a54dddfc3baca0e9856e2bdf8dcb0cef8209992","input":"0x","nonce":"0x9cb0","to":"0xe7b54f8793c8bb9b29e492ad6e4f8d6d5f5be164","transactionIndex":"0x7d","value":"0xc3d6fc66994000","v":"0x25","r":"0x2c2e7929bdecadb75e1bf53add116c441a11cdf535566f37a6adbdde5dfce143","s":"0x1c684ac9766eac8558f7064e346433bb80baacecf336938c4136e0558efaef64"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xae661bbfc2e410190d8a8adf3af712457502e0700dda717a2a22e7adf94317ed","input":"0x","nonce":"0x9cb1","to":"0xe05ccc1b7a0313fdcb79ff3eb0305e91d5c487a0","transactionIndex":"0x7e","value":"0x2b480f427177c00","v":"0x25","r":"0x6ebe9fd04f7d8a7ed086be355c8385ce99094cd822a42f4b710926c4a04c84e9","s":"0x38cd85fb70f0a9367ced78bf6eed59128ca755f8ab7d3c9a2766b85c6e81cd8a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x399efc768c069ba010a4dd3d6a522e4e215b4e6b183b82adb73bdda2b6ec52ce","input":"0x","nonce":"0x9cb2","to":"0x349510b999a5fda5db4780e2aaead90d1e5ccc50","transactionIndex":"0x7f","value":"0x2f835bfc168e000","v":"0x25","r":"0xd40338eba03278577e0952a6c4323cc678b0953e6a4a6915263562238279fddf","s":"0x180f76e6f04cf4ef6fd8d5cd76aeb38b190641ad858c28e3431b9844623a4c3a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x03c315f23d10b806d1ee3903c4c0ab5bc2648f81489f37e657134a0ebda47a36","input":"0x","nonce":"0x9cb3","to":"0x47871f0665a2e91aba71c73e13de5b11155c8cbe","transactionIndex":"0x80","value":"0x20aa4f2aaf22800","v":"0x25","r":"0x52d4ed029392502b17d06324a92946efc40933fcbf1a36e72ec7671daf11f35","s":"0x4b3b4a12743f4ada37757d363da59bf27c4eb9d923b36b379dd1dd47c3f13e05"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaf5ba7e04bb64cb7b2f61d81261c6172507d26b18b42b30f49d43affbd8d23d8","input":"0x","nonce":"0x9cb4","to":"0xce260bc65ff5f6ea95efb3dcd5620f4591f5dec1","transactionIndex":"0x81","value":"0xc1da8171cc3000","v":"0x25","r":"0x8f60322824210fdc76f2c9f2d83b64a650ba21788f256da54dffb1278c1ab1c1","s":"0x298ab7cf17efc560d209a520a600f554d5971fa77238fe255b421ff187948e86"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x660d9a64e3c96e78622f870ec011091c3c7fd9fef664ec5573d65d2c0f89f3ef","input":"0x","nonce":"0x9cb5","to":"0x1749deae94e5fa3c9504ab2849168f335c4fffa7","transactionIndex":"0x82","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xa83f70d6054ac06aadb460225c6465d612bbcbc956d022e17b50bcc730f6012d","s":"0x1a66523c602ebe0a5f5bd0ef9c918155dfc17e32bab33f1182f19194f84de284"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc2cf524f088f4496a5731d36a0b6929759153ca770ebb77ec291d9ff27441d3c","input":"0x","nonce":"0x9cb6","to":"0x3bfe9da8c04e53b387196d30ef1b635ff6264bd0","transactionIndex":"0x83","value":"0xcc4e706bbfa800","v":"0x25","r":"0xf0cc09d24d5fdb64e9cb286e1c3ccbf3f110b3d4e110b192d9de42407d692600","s":"0x240ddd910ab5cc583ee199e92c4713db2f7dc9490b8d6d1b9333085b539d7526"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x744b645bf4ab7711762b1ec7a7eff192203f6944efb392038b4dc9c3a27c14f0","input":"0x","nonce":"0x9cb7","to":"0xf2ede79c5a212432ee3e966386e5a01611c79363","transactionIndex":"0x84","value":"0x2a606995ecbc400","v":"0x25","r":"0xf9e9b8cc015f0a903af9981191feb4b5ffccee7356367c20f4bb0d460cb6ece6","s":"0x1d08280e485e095bcc78f50986630abda306524446b1f43c9b3b4a4e5b4703a7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd068bf23a5d7c792e8b4ce6eeb5b19a6a12dfe5fa3e47bb264d8ea4c6149afc8","input":"0x","nonce":"0x9cb8","to":"0x84d12193cd5f827ac842f98c9a3ea8b5f01e6542","transactionIndex":"0x85","value":"0xc649ac5b14c400","v":"0x25","r":"0x67f9035e3dc6399c195e29e1cca206d6271e8817b78bc7ce8045e67fc21ba952","s":"0x74e7a387695d3a38eb1b213d5a4cad1e656af4a1a2e08d0cabc246b633f630d6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7f61182b71012789a75dcc019c21907390108a669ce7ba70f95c7174970a1f5a","input":"0x","nonce":"0x9cb9","to":"0xda62fa9c85567310844408d4ed1af18b971b3d61","transactionIndex":"0x86","value":"0x14c9782ba97f000","v":"0x26","r":"0x82524dfc74b9f7ba43e164dee5ef1513e2ca9173e6813c7c26b08f0bb4137f7","s":"0x12ca085a43e5508497f9e8bd8c35307ebbffb3ca267a9cef2edb1c514419993e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x61fed8d0284933c47e3d83dbf9809e94917087ef5db0343773a53d5dcc494b57","input":"0x","nonce":"0x9cba","to":"0xed63003b5b433e274b225e2669815941ec23a320","transactionIndex":"0x87","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x988fbda5dd633ce6c9848077b0defc7da98497328dadde7e836cab18d272fdd4","s":"0xa3d1c80b43be4d933156820e7e0eee5e720ddfbd96bd59f2f54a6fd7f2d2072"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc1ea753339019b98d452c9492e3df47ab9363513095d5f929daad42417b6f825","input":"0x","nonce":"0x9cbb","to":"0xda46a91896cd97e7c94924b8ddc2715554d1ea7c","transactionIndex":"0x88","value":"0xbe199b367fe000","v":"0x25","r":"0x7c5c5f220ebea15518f78e36be2d2a170d5a4a356a42cc562772e601deb14b6","s":"0x59217c69942162de414af122a0de01a1ec00bc9c03246c0530de3e15db91a73"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x999eb2b04f57d490da06645c9acb2f0cbea22ce3ab327f4a9636c61ecda5d598","input":"0x","nonce":"0x9cbc","to":"0x4df8fec170166dafb5600350c9947aa999647934","transactionIndex":"0x89","value":"0xc069c2969eb000","v":"0x25","r":"0xa8a89f485bc8d8f53856cc044d795424e4bfe33d5a5f840b1c3f37ec7ebef4b","s":"0x39e73c09306b3f47a8166abe6164f305ca88999df5b02b7cd0527849beacf002"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc711ac0e81667190af33ef264b76d3c7770699347543ff69cae7d9c6175d74da","input":"0x","nonce":"0x9cbd","to":"0xbd4f0ba5c8584b9ec978745f9a03db5784a08527","transactionIndex":"0x8a","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x6ecd6d48196853285f57103c76cc997c26b3ddfe19e26f3880565459d16ac5ed","s":"0x663e7698cf7d5bafb65cd1f2f8626758fccc1a30c47c9a80ff5cc37b5ae905b1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa04a3aaf82b481df7a09c053a6b8de58997f9f273b4990939ba0735c62c773d5","input":"0x","nonce":"0x9cbe","to":"0xead137868089c6354d4bd1339e8320729d68b57b","transactionIndex":"0x8b","value":"0xc3d6fc66994000","v":"0x26","r":"0xc6208f84be9cdff67d2556cc6b410165fbb6882994d7d617dda95254ed020260","s":"0x30da6485220fb714888736a77bacb0ac87137748bfee53a901dd49f88e40dad"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x95608d38b8b00bc8b9426727f856eadcc7e705f784f4d3f48ae29dab2e888527","input":"0x","nonce":"0x9cbf","to":"0x39647d3170161f7d338914206f6d58d13798b505","transactionIndex":"0x8c","value":"0xbfd66e5a367400","v":"0x26","r":"0x1a46be403068d8143d02a852fabdfa3770f18c800a929fa4a01d565b34d28657","s":"0x1b136a2d0eea449ad8c746343c5d1d847d093665064f6613825df371dd4773f5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x00e2d1d6e88dace86c8437fd412997d09a16ed8e782dd86e857c9fea42e22ab4","input":"0x","nonce":"0x9cc0","to":"0xac48389a295b51028822a6962ac5b426bc452a34","transactionIndex":"0x8d","value":"0xc3d6fc66994000","v":"0x25","r":"0x738ef925228e34f3c3d84f1bf731f406fdf88281f2ee392ab86373327ea3ed1b","s":"0x5600337bf5efaf09ff42730158087f1180c40c36fd2961ed2c94ff45e38725b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2ffbee15977867989ab6023d600214a10810269c270c1a26c758aa3a152af8b4","input":"0x","nonce":"0x9cc1","to":"0x257a3600c0e58fc720cd34bdf13ea61ad38a743d","transactionIndex":"0x8e","value":"0x3b6432fb1c31800","v":"0x26","r":"0x5f57524a2a89ec1652fca3a9f72bce25904d2acaabf1e660c0da25592cdfe43a","s":"0x12707d6a77a4e179f99904fa282bd5e4a0d535bf98a097c4a2d72b455bbb5de0"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x970db809f14039e6b35adf1519596cfa20f60fcca7637b822b04c8c7d5f8ab94","input":"0x","nonce":"0x9cc2","to":"0xf3dcd496198ebab1411ca134792304f895a19eaa","transactionIndex":"0x8f","value":"0xb5d019cc00e800","v":"0x25","r":"0xb5d199c236bc60b3535928ff849cb95087b56e075e2ee663f4800f01235d542e","s":"0x4460e24e3729d10d797f4be88ebbef94890b386c550f96e043b28653d1d1ec6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5e5903f0fc43e2be2bc343d9e89d8f0ba621922dc4b6a4ac82e0704ee11f4905","input":"0x","nonce":"0x9cc3","to":"0xa6572c15100a418abd29ea3217b051954e5b48ce","transactionIndex":"0x90","value":"0xfbd1cd91dc2800","v":"0x25","r":"0x288fbc105e6886f096d102d1dc96f90c32016109007fb7680bff77ffc0400019","s":"0x306024b2a455c39222088d37b3569044b39cc2d600c2738e57eda44851b2a00c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xfc0a931a740e71774ecc63e0b764e4c9d0b4f836d7f00ae4d0ae28017099a55b","input":"0x","nonce":"0x9cc4","to":"0xfbe3eaa8fbe8dbd66fcd449c99511c0a57c591fe","transactionIndex":"0x91","value":"0xb482a4c50b0800","v":"0x26","r":"0xef378b58c91bed44c7ced17f4c36ff225e78105169cf2a82bcfcd16a142a71df","s":"0x26881c33faec172f7fe83fd7cdd026fd12573f88c16a17aa5e78f5e3f6ac0506"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4231bb2bec57016216b4e6025dbf126565119c2d168ede494d90a7f1d382e873","input":"0x","nonce":"0x9cc5","to":"0x9b7990106b63911055a652a2026cce6d972db134","transactionIndex":"0x92","value":"0xc3d6fc66994000","v":"0x26","r":"0x1c5f1ac94cc55c5e563100eac213a43ea80c87d6184da054c3521f6fe923b14c","s":"0x54f018e4f182cacd9ecacbe446b23b928beb6171deb28e0b2c8b8ed1e1a710a3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x726daaafbf1ba791f50cce8752e9bf1a6929fe47e54ac1b93aa79222ac7b1680","input":"0x","nonce":"0x9cc6","to":"0x7bddda613c69dc409d67a5e7f922850b95e027ee","transactionIndex":"0x93","value":"0xfcc510c832b400","v":"0x25","r":"0x8ea0986a9fc06f2855011e7fdbd2d5aed22ed88ce7e7b77a034e7c877cb897f7","s":"0x624cd5c8a3140f96dc40a83f56dddbdf9fe84b9b1d557263ac5f6b251d30ed82"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd1cc0903afdd4a618d7df56324428a98a9b9582bfb254173ed064e6f649020c3","input":"0x","nonce":"0x9cc7","to":"0xa1fa1c9cc2681f806fe184e4f7283fb3080bee60","transactionIndex":"0x94","value":"0x2e6ad7727d09000","v":"0x25","r":"0x510a0c635065b30bbec14934a7ed8d799a6eff849d9fed17688be1bd78fd4e2c","s":"0x648bbea70e0e648a4179e0d3e889f7a26baae54e85403b60b07a2af6edfab618"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x323d707d53a05ec3db824e36ec43814b3bd35e49a084dbd6a3ce4f777f0a1a56","input":"0x","nonce":"0x9cc8","to":"0x39728384467996ec57dcdef0cf4982c82e751885","transactionIndex":"0x95","value":"0xb48cc1d8b16800","v":"0x26","r":"0x621c9fdfbd1496173119f38f3030d3b5eefda05c302a34ef76e08704ce3416c","s":"0x2c5f7eadf8a68d1d4be38db5ff9ef93cddb81722196a472f1348f28d852424d7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x77e76f2309ef91cd2366417b36a430b6a3c485ce48dc3814fc94bdcd34b029c8","input":"0x","nonce":"0x9cc9","to":"0xd4da32ade44649a93b7b08ef193d981dac0f5750","transactionIndex":"0x96","value":"0xeacc67a0b1d400","v":"0x26","r":"0xc536f136181fed929f24ace9936b185b08a412bfa944d7d86b0810f748baf04c","s":"0x6b06d0a6444b72eeaec10b551d126594ce20c0fd9e7bc9ee13c2385673d9bbaa"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc88bfdf60759e31503e65a53cd66efb3f0fc37720aded93ee2c5c1c45a1119d7","input":"0x","nonce":"0x9cca","to":"0x635611df213c557d53afa326effaa65d4ea0ef04","transactionIndex":"0x97","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xcec675c38b42f9557c97581c8c4488619243e3f8a4f1f644b3dd08b900a9e440","s":"0x1821058a9a2ec71f10ff33189005f8545ed003a1d8b2e0f06cb74afba8ca3b61"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xec991c9d8160e0a0a8c8427559f6dbcf6714b472e7ce296be5d21f9c0f904336","input":"0x","nonce":"0x9ccb","to":"0x11e55784679b3c232c089277bcf10e80f1cbadf0","transactionIndex":"0x98","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xbba064582085abd6bb0c35fd2e1c3160ac095d0ddaa0c44f415049d218f63d8","s":"0x5ede010809dd5e0efe1455814e1bf20b108a445afd3d8d7e8ccdb77af513e8e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x621a8230b5080228901854d87058a2d00475d0d4c40787249c51f325a099ca2a","input":"0x","nonce":"0x9ccc","to":"0x24ad36f1264980e4c0cf4f8f3cae33c22681f5fc","transactionIndex":"0x99","value":"0xe13ab79a2d8c00","v":"0x26","r":"0xa74a4e20cdaa096a62e344062d9178ff63ce2f7788eba0dad142905545f49209","s":"0xe42d9884686d6b933753ca48c3f41f0afd1fa0d46058bed61a80b89f0e38033"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd7bb8fcb3c156badf23c8cd7e51fc3eecad18e01c9116a3a908b4c3619c8de11","input":"0x","nonce":"0x9ccd","to":"0x3bd4147e2843e22a404b3a7ec4e623dcc1d03e2c","transactionIndex":"0x9a","value":"0xc3d6fc66994000","v":"0x26","r":"0xe39c6c476a58562df02ef7a65c0fe91fa1b160461d58fad3dc3e78773ecb209e","s":"0x3918944fcbb70032d45ce38ae1b8433f21acdfd2d8e8cf254860d82bda5cac6f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8cc27b7bab23324ddcc94badd25686dc5b4fc6a6d5dc5e8621a53928f7694154","input":"0x","nonce":"0x9cce","to":"0x539be33e02a71c2794b473ffd7d93457133bd53c","transactionIndex":"0x9b","value":"0x2b97e1c95848000","v":"0x26","r":"0x4e3192b3f87e0ca5c4a0e88d7586d1f82e14aea5afd34216edf5d237a5e1ddeb","s":"0x44be3d194141d488ac5be4e6ee28f8220b745828a8c295419592e7f4ac9108e3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8b8d69a1253996f85ffc76260e1e24440c0aeb426f8a84261c33a5bd325922df","input":"0x","nonce":"0x9ccf","to":"0x895aec706916932f6ff92f396b822a7b742f8894","transactionIndex":"0x9c","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x73220c3777d9143003dea0505379d52edd2b0def10229d662daed56b524187ae","s":"0x1b4962a36536e15098f5cf2a0de19b6235b0417306a0fb0eedbe449a5d35b776"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbfc34a1bbf3f08c83dbfe4f831ef8748d517a4bf8fd329e726cf42fa579cb4cb","input":"0x","nonce":"0x9cd0","to":"0x08fa1cf2fd7584a60e036d28aa1f15e428ead213","transactionIndex":"0x9d","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x8d382c30c2a6b5d163ccf772aa01c5783ab82f9136130446649eafb4e96ddfc0","s":"0x4ce80fdc02b364a26b565a8dfecb12a7245898a21d66591b77a52d4a688583f6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0fbc84a0583a6bffd51e6eedf56ca022923632aef0e82b9dd542d7adc5d61791","input":"0x","nonce":"0x9cd1","to":"0x906df0ac2b8e313a423698601881cd7019daf577","transactionIndex":"0x9e","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x31f4781e47379574227e2a230ae927e83a55d773ab4cffcc91c0e5608b2c6bfe","s":"0x174d3e978fba0bd7bb4ebd1f7fad798c402b684995f8ec44b46af843ffa5b5b4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe3314f9fdda1e58fb733b7931387e789b56d36c11855a815286417dab541e1be","input":"0x","nonce":"0x9cd2","to":"0x8e88bb62681f28a830d237fd023f2f2d20e7c04d","transactionIndex":"0x9f","value":"0xd28720c9962000","v":"0x25","r":"0xafe02a7c2b2699acfd9c933be9253453c7abca1dfc380dae2969e7ae45c1f8df","s":"0xa0e16b9d8eb149deaa599d6eeb952fb2a7494ddb7047c93babd582eb23e14ea"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x755a581c3a6846514c20e1ae3edd96a0867a2861256197a37ee5bdeddb5d2e69","input":"0x","nonce":"0x9cd3","to":"0x33269065d17f426432be4bfbb773debb4c96f1c8","transactionIndex":"0xa0","value":"0xc3d6fc66994000","v":"0x26","r":"0x196ab468529ac624cdcdee3722add7003460ff30d8fe7acf46e33d20bceecc06","s":"0x71a4036e59d768bd4d343f9477d3190cbc83b402a5ecd8d416a3b616fedbbea"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9df7142ec0c5ee2ab46290936e726a940e445106d6f05be08a3765178cc93b86","input":"0x","nonce":"0x9cd4","to":"0xf957e85e2418b0cb016f61b94e77ce0acc269c50","transactionIndex":"0xa1","value":"0xbca080a4a2e400","v":"0x25","r":"0xfa8205bf60de23ff80b8633931644e68b824a0785f393d565a5da518a1c2630","s":"0x538220e9adeb78c3fe3c4c96936e660a9fd1d1452e87729809cf254a339526d1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1730ed3d9f3a10b52de777e0e122a302399da8c1bd6d5da9d9bfa86ee2f89ca9","input":"0x","nonce":"0x9cd5","to":"0x3cd376f5b979e46f0cb5b68c3902860ae43ce85f","transactionIndex":"0xa2","value":"0xe4101efecde800","v":"0x25","r":"0xea5079eb2952368693662d052a2f8f0ef43a9febcd18a85b33491d3b82c93090","s":"0x7698917e0c0c3e64b15da00503d507a6f8b9dd86806e16e38bb16f6aed4f02ca"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x288d87d47b19ba2e65a60fe5e5c90da5d363209d7969057c198583a15bb305af","input":"0x","nonce":"0x9cd6","to":"0x1b2fd12e8b9abf91d99991dad4d9a306765c0367","transactionIndex":"0xa3","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x82bc034aa4e4ee35e3218f0dae7cc8373ffa45acc115d677ca788b716fe6426f","s":"0x3c8be8b725ea4f35d0afc236baa4b2aad175c41ce7b0093a15fdfd77d379d18c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc7dd7fcb098b82b800dc16b3532196c89c3b0faddabdfdae739da5c7c72f3409","input":"0x","nonce":"0x9cd7","to":"0x94e0323df94c4065979c1a421479d08d8df1fa1e","transactionIndex":"0xa4","value":"0xb5bd33937c3000","v":"0x26","r":"0xcf456d759f0cad5e1fc14c1ee8c3d01a6d406684d59752a549717eaa2e9207b1","s":"0x14efaef72e72e1c8198efd2bb11087af1d3b0f4100cea3fca248dad012a405c2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2145c573f84f33f6c003ccf1eaf9f84c9c0601b5fd5a5e8382e8c1757828b14d","input":"0x","nonce":"0x9cd8","to":"0x7bf32bd578ba355bf700811e599247e810618ee6","transactionIndex":"0xa5","value":"0xc65e071b07fc00","v":"0x25","r":"0xe1b492da8fad24cfd7d349294477e0fad66921bc91623152fc06409de2fb3cca","s":"0x6b16cd9a28dac6af29e3c143ec361d576cddcc8c71eac0c4481618614c62ad57"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x58611b2610635a8b76df6f7e605ff0702df017348abd2238782a3359cb71dcfc","input":"0x","nonce":"0x9cd9","to":"0x2bd7aea169058a604d456297373eb84f5a34cf04","transactionIndex":"0xa6","value":"0x1db2197d8e18c00","v":"0x26","r":"0x891409b0f022fd802e451215ae2ee96c81dc06229cdbd05ddcb9939da5ecd579","s":"0x68f48717051b13bfb8578afe51c449f31a3bdde25ab3ad83b28d8cfdb4611f6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x87c02b06f25d71f35374a271bb60fe2f99a79af6508d9e33aeec498ae434f73f","input":"0x","nonce":"0x9cda","to":"0x1655649294a57e5c11172c8ab523eda86e4fd1af","transactionIndex":"0xa7","value":"0xc3d6fc66994000","v":"0x25","r":"0xd80e0eaba17f95a944c5b658477975f19c28ac94fb8b9fa2566f3b38f603474c","s":"0x1580339fe9298d464f58e8c4fea9389f7006ca82b20c930b8909b75279c25e9d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2b3c06aa279ab80455f276671a61a838fdf05b76a54a8818fa64cf95c4490b36","input":"0x","nonce":"0x9cdb","to":"0xcd3a553544775d8611e698467795f358bd7fe55f","transactionIndex":"0xa8","value":"0x11ba73f98f3ac00","v":"0x25","r":"0x1dbfd861141e35072522bda3c1219194eb01c0e330c89b6022ec730ac93dcc31","s":"0x5af83895a635f553e3b9c82a798a7d53a5a3a86488a26fb27737a33264ac9f24"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x56004a943b7e36b67e741870b1890849c34990d048a0a455e808cb132540d496","input":"0x","nonce":"0x9cdc","to":"0x56fc63ad1fdff5630f17543342af12d0aa15d247","transactionIndex":"0xa9","value":"0x154e819e545b400","v":"0x25","r":"0x377d06a741b2450b091d5128e18b1ae4c760ba5207e8d9efbfc6e774b1cf60b8","s":"0x4f0083b5968aefbb5acefd1b338180f8b1004ff1d6c913d029c66432ec007659"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa29176cca49a109d53efa403efc3c7b35ba2a1b195484f8c05e69b849b894a8a","input":"0x","nonce":"0x9cdd","to":"0x297c6ab093a5e9c17a19bd83005e309aa6bf90fd","transactionIndex":"0xaa","value":"0xbec3e418240c00","v":"0x25","r":"0x511df109f77d1b9d2c7011b0cc8a8bba940abbdc53890544d45beff6c3a61d06","s":"0x11d11e39276e64593c4275673271f41c650c423cdec21468f6309c7c82fdf886"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1cd5a9fd79b22626d1df97c78709f4db9abe62157196a34ac537c59280490fe9","input":"0x","nonce":"0x9cde","to":"0x287ff03eb0ab5dab611ee1e8e7808289cf122197","transactionIndex":"0xab","value":"0x17186bc5e484400","v":"0x26","r":"0xfb6464f449ed3133bfab98300f69a9af9c2fcfcf70348f4a3cb804e9ea668abe","s":"0x697002a0151af289d5bc4a5b42dd810d34e456ca4ced24b882ad7ab084785f6b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x00c308e3e62fc3b58f7d7702e3882d6d2aeb809859e4487e8fa997943e7a0bb2","input":"0x","nonce":"0x9cdf","to":"0xa85a7429620085477373ccc651ce6aa411c610e7","transactionIndex":"0xac","value":"0xc3d6fc66994000","v":"0x25","r":"0xbbf0e35e491aee18fbb86d3710083e914cc858268a6af2d16426bf7ccb2fd973","s":"0x38a6b8278e842d9223bb24cbe7d32ac4cef3b83cbe567c9c8ba257bf2a38ddd3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaa0bc5f611f5828d51be4888401de4557a173262078eb6f11315a917fb6c2ebd","input":"0x","nonce":"0x9ce0","to":"0x3f18f9a66a30cbe9d6c9b02ec54254057eacc43b","transactionIndex":"0xad","value":"0x185af0237b74c00","v":"0x26","r":"0x22f3ba4c1b250346e58fce9f135541005c440aef5636ad99bb831fdc64c59be4","s":"0x60978c1e9808dad73a541cf557de560135634d090ba229bebf0524b28b3ffc7d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd2a4d7e6549ce0578679a0d11d2d2b5f2c4f64172951362739f9b16903e82621","input":"0x","nonce":"0x9ce1","to":"0xa0fd5398b2102ea03918a547cfc58a1fbf4c2403","transactionIndex":"0xae","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x6055a4f416f5e818f9918bea1eaef0a9fe14a3661149a12daae0f48ee88d0998","s":"0x4b03acb5deb9c71ca143971abd748e935db2b76ad8430c8a3cbb2c757ff8fadc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb42f3a400da89e618a4c4d35f0ed6153bfad69d3346909bd88ee8171d5be5d4a","input":"0x","nonce":"0x9ce2","to":"0xcefce92fb15f3164268589b706191c8362601e97","transactionIndex":"0xaf","value":"0x1db2197d8e18c00","v":"0x25","r":"0xd22d3e17926de80a691c83667373b97e88753d8507b3f61764b494b624ff0e92","s":"0x2c2406f7bcc907e877d2145b1b29ce4b818d14e97d37d2c6dcf0271b22d26af7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1e8bcea74e6ce6b5ed1c81c6fc9882e0488b4e82614cddb5fad905544d434fca","input":"0x","nonce":"0x9ce3","to":"0x724ac56002fa96bb4476838cee9c22621d392e11","transactionIndex":"0xb0","value":"0xe10d49b62be000","v":"0x26","r":"0x3dd9c54a927146032bb7d6104b7790467ce1c6441524020ed704acf458d58887","s":"0x4ddf7517d33b421d07605d2939c1e3a0a80a10b46ae21ea0e717f23700376112"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x217fe1e5d79996d4d3c2f384a516f58fbc4aa5618ed37be8d8176e1318e4bd2b","input":"0x","nonce":"0x9ce4","to":"0x211544a96613f246545b0b8308ad688697e02b4b","transactionIndex":"0xb1","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xe7e43e38fd4c5ac224564611b60dc13ff3b6834ca9210954033a778a744e8a35","s":"0x2e29744b11609e3758cf7f0486448b82f89296114af13a39e14a573ea491f769"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1ee443f2fe6e52c762b7e3d305d77c427ebd30cee71c465da6f199f53e37b5a1","input":"0x","nonce":"0x9ce5","to":"0x3a10cba0ec57be6d905e3ae2a3d446b1e2b6f8c3","transactionIndex":"0xb2","value":"0xc2cdc6fc2ea000","v":"0x25","r":"0x17a76b0755c0b70ed372cf66f081d4ca093069d3f6b0b6b01d8b0e30a2b4e80e","s":"0x3f46b120b112c7a3688d51e4cb8712ed64776d7ffbc2d0ec63fc9d3cd07065e2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4dbf985934569c076b2f6190838817453a990ae27aba71e59a4cef7f7d8de7c9","input":"0x","nonce":"0x9ce6","to":"0x13eedb523e8e5c84afade1a43b8a4e447d417c06","transactionIndex":"0xb3","value":"0xbfd66e5a367400","v":"0x25","r":"0x213e26c9232cf2b74adeafb0e055aa261c66cc014d34d0fce46a581c60788eee","s":"0x21a635177917aeee4653bfb94d44db6b218b75009c62f1ea882fea1fc35af5a4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xec9bb7e6c141a37985ab43588ed88f7969395614615636d03c1b79ed7ebe5e59","input":"0x","nonce":"0x9ce7","to":"0xff509eaf1c3cf5ebfdd485fd46ef3122ab080768","transactionIndex":"0xb4","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xba1b67a6465f30389cfa278c492d906b1a122fc7ac4a861719402a6d32b21ed0","s":"0x3116dae25a6df9bb99297ecb492c10dcf5bc87ebf09cd43892f9974eb645fe59"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1408a4b31b8be29ad4955109cab7bb2caeed3d07abb7477cc5c2e102aa16dc00","input":"0x","nonce":"0x9ce8","to":"0x9ceb693dbc8d0e83b281dc9f2f0c9fbc80cd2179","transactionIndex":"0xb5","value":"0x10488f2b8489c00","v":"0x26","r":"0x94a445991efb25f3f0f172c75af1ab84cd698302b658c7ac1ad1d92e165072e5","s":"0x5a2ba979d90c2f4d78d39b903c88be1859fb22d2edb1275683dcbb500ff0b9d5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x860d308e608ed19833ff274428e2a9718afcbb9e599bcf7d5b29846b77f938c3","input":"0x","nonce":"0x9ce9","to":"0x18cd86558de106863e994c35a5c63bad30e23838","transactionIndex":"0xb6","value":"0xb2664919715400","v":"0x25","r":"0x769a58a1d432a1caf7b847257659d5f9e90af72db57035a42c64d268ea98a3c9","s":"0xa88b914c5243ceecae1d96273f5c04b5add4e0688b1f7b355a28e270e0747ab"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe9d76862e1bc46fa061bb8d1598c659038ca0c1c621c17ccad338c989dab12d0","input":"0x","nonce":"0x9cea","to":"0xc13c2d8ba7889fab62d820722b2123a13b26e4c2","transactionIndex":"0xb7","value":"0x17c1adfe0b47000","v":"0x25","r":"0x1d31fcf986b4464ea69ebf1ef99c90aa34f8bdd254cfeb1b6e3f62a55a026ecb","s":"0x19461dc3be2733c3ea1319232d8d2247aafbe43dd8f7e898f235f1c065e6b56e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7f816b4793eccbba701e79f0e1aff842515eac816e9984609bb6beb37a42040c","input":"0x","nonce":"0x9ceb","to":"0x845878661700257c0b2b51028272edcbfdd4d0a2","transactionIndex":"0xb8","value":"0x1524b1cfcc2e400","v":"0x25","r":"0x2ed8c352f733813b45fec2a7f4454294cff0e937e0e79a3cc69c1381bcbda3cc","s":"0x44a26812b96e80f40823db93ab2e595f4e317c324b08c92e8b66f9a9cfccab4d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaf7d3927d7434976786fcef6700fd0ffab006d66508f52d48e0d771453c6d662","input":"0x","nonce":"0x9cec","to":"0xbace08e3c0c1c2f232d83ac08eb506d4528d879d","transactionIndex":"0xb9","value":"0xc223c19fe34800","v":"0x25","r":"0xa9d9eb89ed7f59e74199d6d2520911a726222e6f9874d52be5bd189d9a199df6","s":"0x3b17a05d1304b7219c3a5c09de56979b03fab9f77e7bab3cfb6c9d6bd770abf1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x06e15c18ef71316b4fcd19ae69a0bc4a78de770e27b18059901136122a9c4e03","input":"0x","nonce":"0x9ced","to":"0x33bfeb8ae567ce99992a353463819f7fc6735d8b","transactionIndex":"0xba","value":"0xbfd66e5a367400","v":"0x26","r":"0x641c4ce339ba76bf21a3d1a629de3a1162b9ca5ca8564eb1bc38608c2eadc0f8","s":"0x637b595c9180335cd72ceab2a6ee5fd489b6ef201f65906cbfcbd755fa3794d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x1ba46c696e1030964f9824bb8ee284d1ff6254ee5404170b9421195ab141c7b2","input":"0x","nonce":"0x9cee","to":"0x34debcfd3992a938f17b58585ad9f5d73a673fd9","transactionIndex":"0xbb","value":"0xc3d6fc66994000","v":"0x25","r":"0xeadc532404bd692779019e4e2cb6dca4c38ca2075661984595b91b18fdd196c4","s":"0x5689b7383296d9233b98af8f422a67c4ca1a7c2e6d286575e6b889f38829b9a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb9487d0a7f752637586666f40fa99896ccccc2803c47cf003333c09275046113","input":"0x","nonce":"0x9cef","to":"0x4e205689f178a5903422ab4fd6410b435a82b165","transactionIndex":"0xbc","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xcc38dca840bd2912df3667aeccfe3711a98420eecf41ca3c14e61f525f191ce3","s":"0x2d469cbb6a1fc81854cf1d976c1653fdbf3ca79bdcb28b8cdb84611f3874728a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xce0293178b71291de5d02b8124f1c252f4018c1d55768dcbbf193f7d361c53a2","input":"0x","nonce":"0x9cf0","to":"0x03f4c3ac41b38e8d9f349e675d0fb4c509b522db","transactionIndex":"0xbd","value":"0x2992f07c93bc400","v":"0x25","r":"0x9eeec756163c4b7c1e73fdb0b4edb4808d325045f47eec192d5097034ebef0d8","s":"0x73102b81a6f71f09fdb6c1931ff817f2ed984c3a9b1d22f84913606f80bc2ed5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x2cd24cbb022a9bc0352e4c532d939c48ed3f71d644ee841f816fce064f5c2b70","input":"0x","nonce":"0x9cf1","to":"0x0a57963ddfa8cc90383cef7f06fc6e7ab0b35d22","transactionIndex":"0xbe","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x10f8c7721ca343a0cc32e711538ad4eb3d37ba56fab12be5c1f8894aef67a406","s":"0x28f65ad322f0d0a1d381da1053bac2032a392118ff7f5eb9608eb8c6abbfadda"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc3cc47c5c88b194f48aa0d8bec7d2c9ab31dc4e81e7380fc99942b9af503e6f2","input":"0x","nonce":"0x9cf2","to":"0xc6bd787851fc8eb27e9b0328b570549663877735","transactionIndex":"0xbf","value":"0xbfd66e5a367400","v":"0x26","r":"0x3e9d7f4fe67506178fff36ddc6423fb32c489b874210ec4e28882aabc3f3cc75","s":"0x7b0bb7cea70dcae0f136e052d6608062ba7bf41d83e245f2ef6e722e52b469bf"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7cea8c95bee7eb2189dbb6d4444bbab4784c1494336ded6c8d1e761f9b94d618","input":"0x","nonce":"0x9cf3","to":"0x13726a3c3fde08d00532e221957004ff6d1342d3","transactionIndex":"0xc0","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x8a9f17141816d27034ad606ef936ca7c566bba5301cef78511cee9ef5e428d1b","s":"0x21a40f36f9bdf2c4a57f0dfe12ac4d5fbbf114e0188067e84d905f313a847253"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x089ba7df9163e818675a85e53e4236e543c16994423ad1b64a81f43c37b9005b","input":"0x","nonce":"0x9cf4","to":"0x8773379bb3de3de7fe976122cdbdd801f55e4820","transactionIndex":"0xc1","value":"0x187adf8cd328000","v":"0x26","r":"0xa488b0f12d31783b85845bcfc5b1b4ba5ffcfe736acb1f9d35444d1b3905b1b6","s":"0x6a8086dd57efbdc84bf54322738de8faa9ba607f4042ff7dab2c0e267bfb08dc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb66b54b00b9fcf3c61267c7d0b1762e403bf6f409a8e7275d84a0994946752da","input":"0x","nonce":"0x9cf5","to":"0x78d53308e6ad14799789d7558ce78c73827fb780","transactionIndex":"0xc2","value":"0xbca080a4a2e400","v":"0x25","r":"0xd59825ea762c091be2f0717d1e049bf4a0b818c657d358ac04991c1680d720d2","s":"0x639e1beef12560bc313b2454615a38d84aca04671f5d41979b363cb18852f0f6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x71641cb80e0f1f39ad689acf6e56a429f1c82d7ce64694f30636cc61c98ec174","input":"0x","nonce":"0x9cf6","to":"0x4d73cb2b71fa1f7e5e63a7ab58967cb92bf4b921","transactionIndex":"0xc3","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xbb686da884114b60ecc2ebb307391098cbb273ee4b92d13c1ef7696a8bce3fea","s":"0x19d16886c84b1fcfc7b81ba07c05a57efb42438c410217268d3f4f12deb1a65e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x78d7967c296e433208d48b24a9f9332a38fd0b18781881b893c6eb2c5dd4a570","input":"0x","nonce":"0x9cf7","to":"0xfc9481332ace0c3a7ec57bf0cd4bd39fa115eceb","transactionIndex":"0xc4","value":"0xb731e73ede1c00","v":"0x25","r":"0xfcaad74772d1a076f8188b4a6157a898e0d85670c71cdd842d151aa281b0a3ee","s":"0x32ff5cd65b7379190f099ae6cf86ec0ee383d3ecef36f661d013928676a7d216"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x29f864a1bedabb6457faa0a7fbfb103dd6dc01b7a0ca0be7b1bbec5f93044f4e","input":"0x","nonce":"0x9cf8","to":"0x654240e37aa1beb5b40a18bb9cc69334b3a56175","transactionIndex":"0xc5","value":"0x15064943c09e800","v":"0x25","r":"0xe3ebe65dc975500e1f4743ceb3ae145b8326e72d5668ac8f0db9b65e0c8e9977","s":"0x6b7f1ecf321444dc3100aa1e3af67f4620853b6d3555cca6d44e5b51a9a3fd6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb1293a984151655a0dcc5ab9059b8276e3f83eed10c0ccbfe4884c318935f106","input":"0x","nonce":"0x9cf9","to":"0xbe5cd7c23c060cd74f64b91424481bc40bb4db83","transactionIndex":"0xc6","value":"0xd76c7c0a756000","v":"0x26","r":"0x2a1c53b2a71916243828174412e55ba03951286cc82947d8490c6fb2e61babc0","s":"0x39a2e24783ae14e66facf41c5b8e44e529e352712bc9962d1ef71bfbe5475b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc793ec632f476aa4edaebee4f358485d245b0026804811b7f6528b49175691ae","input":"0x","nonce":"0x9cfa","to":"0xb82e0f3c72820861037bd7c3d911a96e6cb25497","transactionIndex":"0xc7","value":"0x17c1adfe0b47000","v":"0x26","r":"0x14aabd73b35d878b51c152c0ce5dd892cb5da4796b63f3ae1d3a9c467142d2b8","s":"0x320772c6ba1256843ede366dc1ce288d20af17f36ad9d908bf8b3ab35a6b1aee"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x12169fb22d1405f853c977bbd994f3baf65aeb9ea4482ac9060161c6a4f0cce7","input":"0x","nonce":"0x9cfb","to":"0x32e700e832d99ae47a00227cb068fb5cf3da5edc","transactionIndex":"0xc8","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xbc7b96700d6e7f4ba17e1528574d87ec8ecb2bde20bcf3714e36ba51fbc1351","s":"0x12ccc6c7288102727ff6a4a054afafc3e77237fc35f8b0598aa05588c9eafe6d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x89ba13a7b91f35ef7b98fa20a5f60fec657ded837b72cd7a69c5ee2cf5250edf","input":"0x","nonce":"0x9cfc","to":"0x776438b8e2e99ae520c68424362fec87cccf0eb4","transactionIndex":"0xc9","value":"0x3573c77b995fc00","v":"0x25","r":"0x1687de92e6a9e03f5a26d7e9adf01d703687ae98723f7616059a2eba1042bf4e","s":"0x4cc82767b8bb816344996892375244c67114845fae15c5a4d314f81278bca8c2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x6471d332d78de2d77d20c68621f01bfbfd402f1f5174d5d23f1f65fe6b8835e9","input":"0x","nonce":"0x9cfd","to":"0x9d11002318a9dc9d1933c86f01bc629d51e6a3ec","transactionIndex":"0xca","value":"0x1db2197d8e18c00","v":"0x26","r":"0xf3665db4603eeec0d6b9c126da18d1d0c4e723635416d496d122b51bea8e5c38","s":"0x665537b02e8c6b542695af06167d86232ac78f5f37e9f303aed334bb81715443"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x27aa3212eb0a239a711f186d8a63a42512a18bd9332d7838f523b95118f99749","input":"0x","nonce":"0x9cfe","to":"0x9246543d9461a606b2840433f7c392b5aef8b285","transactionIndex":"0xcb","value":"0xd6c261b9bf0400","v":"0x26","r":"0x4d1af5be4a0c757b54eb66058c3feed92c2a1a85b1baa62dd4e9ce9dfbaf04b0","s":"0x7e284bad216625aa8ce5ae05b475cfbd3c5863ea51885de4b5c90f290cbbde8a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x787da5b7891661565543d353b5dfa70e5873ff85c7e566192963aa3885084aa8","input":"0x","nonce":"0x9cff","to":"0x808c940bf3acbd75bb3499318b352db2432d614f","transactionIndex":"0xcc","value":"0xbfd66e5a367400","v":"0x25","r":"0x5a2bc1e4a21cd2ad8c7819b3bb1da0b14baf103a217a076d719ed41132f57adf","s":"0x19b6341660bc14bccc747f7737be6ab023bf8a9041402a5051013faf812947ec"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa887294974aa257f4f9a16b7c13d266d55ae0913c59b40da033c3d853b4ec752","input":"0x","nonce":"0x9d00","to":"0xaf758aaae27a66b03dc018e30b8effba820187f8","transactionIndex":"0xcd","value":"0xd10ec777941000","v":"0x26","r":"0x3efc22d04b40946916b5dc10ff039c45a26eecc4c024a11b2480777cae4af45b","s":"0x5364886cfddbbf40cf8fe12aa986ec4579478dc56f4fe0ca12892fe6f3efc591"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaa9a352aff5cc1bed522ccdd197a644257d9ee7cdc6e8f61b68126e0819e8ab7","input":"0x","nonce":"0x9d01","to":"0xfbf330ad8f876cdd7b89232cfe4b593722882852","transactionIndex":"0xce","value":"0x2e86359cc169800","v":"0x25","r":"0x835f89cae0dded62ea8c6350d3d3bcf652047b57f13bac1ee26d112b7aa59214","s":"0xc6e496eeb284948bed201735ff3bf63c6499910f3d4ce5b7d6b172dde27af23"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x425b4f3ceab69dcc0d05ddd2604dfa40e78160d8cf839630c3e7919cf954ca1e","input":"0x","nonce":"0x9d02","to":"0xeb7d710b47c38c4992da2c3289ba57a85920ebe3","transactionIndex":"0xcf","value":"0xb35229ba10b000","v":"0x25","r":"0x35b710be13362ded9c96271d2d401cfa8ff606f3553827e8327477fd612e3c7c","s":"0x7b4290776818db42b4411a812ab0eb57aaa0884051369a30357e86112446f267"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa4e40b677c8f444c3a7b97d23533e43d4a3ae21dde8fad55771d4c7ef5937c5c","input":"0x","nonce":"0x9d03","to":"0x28e8318732b762515981ef37804cd4eb6a5758e0","transactionIndex":"0xd0","value":"0xc3d6fc66994000","v":"0x25","r":"0xc783a1e9e5c08743c5427c6847ed19864e9c5adaf95a3e46912380fc377a8f4b","s":"0x4b83d0068197957b2479c6778f88df8bc6728aaf8175bb5b7221de1d689a9360"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xfbacc6bfb7f44322b7709bf52429cd5dd9d9d69d5c247338b1bbe84f015494cc","input":"0x","nonce":"0x9d04","to":"0xf00d3f4ae5b4214a302e464b3d12f031b127d483","transactionIndex":"0xd1","value":"0xb3d90a82e2a800","v":"0x25","r":"0x3f511bbba6e703af96fdf15b9adec24067f8390faa99917226e705617b0093f7","s":"0x154bb661e8272e7134fbd138b127b1b84cb5db49f1ae2a3f778c307d72bed1e4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8b84a4966d38d776c6b8962a1917bbb4f059729e34b99610e2c7ddf79ca49228","input":"0x","nonce":"0x9d05","to":"0xff8d7b0bff0fb85b52d10e5d7945b73161cce477","transactionIndex":"0xd2","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x3f5a312c1d08ec8dec4f42a512d85edebf264f008965941bbc5353e597feb38e","s":"0x715c0b3fe338250faa707432a7cfbd4e52c9bb2308d8a02bcf74b3041e1b57e6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3e0fc3160fa5c53b4c1e2e3e46b4290771144d0e990ae89804f60c99f32b3cfa","input":"0x","nonce":"0x9d06","to":"0x255157a27d51fabc579ece5361622eaf8c1813c1","transactionIndex":"0xd3","value":"0xc3d6fc66994000","v":"0x26","r":"0xc713976a750fe379a85211f4f02479a7dd0b225ef43576d566f7533acbdda3ba","s":"0x1cc622ba98693076e2d9a21e141f524eac7fb9a888c7bfa889f058c63fa67c88"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8d53b68772193d037d5975e35fab74223b481d40feeea6861fde738bf4ef2671","input":"0x","nonce":"0x9d07","to":"0xd3e8de3b5a63b284bbed2d5cfe9794e3d5aaf221","transactionIndex":"0xd4","value":"0x2bf31b6d7af7400","v":"0x25","r":"0x6c3f46638dce4a49f9d5c743960bc20d6c3db6209ab199eb63ffac809aa8d860","s":"0x777cb49838ed0c4d553aa1ab1614d56b863422ff77b580c8fdc42612fac7daa9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x92d4a4e90c1ce7e3862c41aa95aea5c3354c7bb10b6a4516ccec5504b05cd033","input":"0x","nonce":"0x9d08","to":"0x9f52e533d0d336b0205cd27513d0368ecd27723a","transactionIndex":"0xd5","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x3bd544c739b57fc40be9937ec9af4a6d89e6e48d357a8280b27bd39a320064d1","s":"0x5624ef908fd74fe087ff1e81ce64d11030dc92644f9cf3f51a791fb13482e5f6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xdac1ca5e90336bd34ac6395fdb8d2838abd22a6d22298adc66d402d54bd81587","input":"0x","nonce":"0x9d09","to":"0xb18ed27b948855cb6b70355d15022c5ae1bedf2a","transactionIndex":"0xd6","value":"0x10488f2b8489c00","v":"0x25","r":"0x1499d499a1d314ad6f96ce73f641db22d1bcc69b992a4fe2db823f58182ff833","s":"0x6eb9b31a603012a831b78f14d5b902d2b9d5bc78f365ad8274415eae0b33955a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xab0c181188235dd287a7039351e65ed31a1c3b6ca3e25265672d1ffce9e26d74","input":"0x","nonce":"0x9d0a","to":"0x6f607c25b954d8ecbcdbbd9963339670f266e394","transactionIndex":"0xd7","value":"0x2c8b2629b4c6000","v":"0x25","r":"0x525127a98bbd7ac6bd66e2ed099fcdbaa6bc31fc232916099823fcaa7867132d","s":"0x2477abe88708caf7091f55ede6b4bb822d77a1e025d051f602157b851d092daf"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x83b03938fa0948f26c1b00a62f399c46155988aee9d6d2f01c10b2c4fd185e5b","input":"0x","nonce":"0x9d0b","to":"0x5a5dcb51cd6ce7b05303ab28429edf8d9d3b062e","transactionIndex":"0xd8","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x60a9c574271e060b3fe30f2c91e16824c27ab6487103aa4844d4b21a9161a6ef","s":"0x2af5c7fada52e0fd32d0c79e0decdd6942deecda5433a12695c99a19957fcf5f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9fc136a17fffb9382333c373b4179a3eb7c331885b86a422c31f5257da22a55a","input":"0x","nonce":"0x9d0c","to":"0x6f153c34ccb387a3c65c456f2bc73d02dcd74aa5","transactionIndex":"0xd9","value":"0xbca080a4a2e400","v":"0x26","r":"0x3dd0047baec92ffff8217aead0db0dedb1eee7269bc576612c753832f9d9f226","s":"0x7face9f9fa7c5cafb479f8779f083a74376a15f23b1d45678c5f96fc242e1765"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbf29e878bf6ac8691125f38d804c2c7ff3f73627a554a83609e3c11423da6903","input":"0x","nonce":"0x9d0d","to":"0x3cc6361ffa45d348a6baf3bba05c4fe0eaf15b07","transactionIndex":"0xda","value":"0x1708302ebdfb000","v":"0x26","r":"0x5df3e470d3dc803d9c85224ce70047fc39a523a9d8e0aa269e9e9849696aa7e4","s":"0x50ac36fc9444ccd19262ada9e5c9f5d41eb67a1962dec1b4a76ecde83f7da264"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x351f9816a5f1a92031a5cdd7ced1a49b4626d215df0306ba9d49d99b9a8dcd9a","input":"0x","nonce":"0x9d0e","to":"0x9de1d52959d35e32a2698975a137f183f9511e3f","transactionIndex":"0xdb","value":"0x14c9782ba97f000","v":"0x26","r":"0x548a968998e3260944e30d7a1176218e72fe8add244019aba026ed26dcccfeb1","s":"0x49697d323bb12ebe772e5f62768b98ced32b127d1270ad5be5da2fb57041d8b6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5d2499b5492e6de32086142ddcb47f24d1e1e7e46c7088af168eb9f74a9332b4","input":"0x","nonce":"0x9d0f","to":"0xd695c7dbd84e5d58c7ba1f26d20b2593e15a1fec","transactionIndex":"0xdc","value":"0x2f55bf3ca595800","v":"0x26","r":"0x191363910d31ca0643f9d1aae7a3f8c8eb81158022f1e7c73dbb2115c8e00917","s":"0x5991eb14537e7801cfa75e0750fab12c6dacac01540783bd9873116ca9adf9f2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x45483edcdeda70664203bfb599bbd94e27673d6f4c43f4566ce9957c468768bf","input":"0x","nonce":"0x9d10","to":"0x745d85da1aa5d82f151fb90a76723e94e7c4cb48","transactionIndex":"0xdd","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xd66e41d88dec87395300a329068cfc53854af5f9c74295a79604b769f6bf9d00","s":"0x389c13b049434448195df4d4198dab5adce0eb7c54f89b234e21c4002277c05b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x180450baae621a037e6325cda67da0d5299f3bc53ab5fb53cd2063db30ad857d","input":"0x","nonce":"0x9d11","to":"0x1f078100f770dca9bc0de8a2e56281e68d10efc6","transactionIndex":"0xde","value":"0xbfd66e5a367400","v":"0x25","r":"0xc5282a113557bc82f1891870d82e0fdfa866631c59fe0ef8fcf492a81b240a84","s":"0x76499a4831ca6ffa0a522d16f08095a03475ec091361196a0cab29e9a64ddd08"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xddd7bb565dc8195e56ec8678041e817be52defefbf1c61ff8e50aa5d2f4995fb","input":"0x","nonce":"0x9d12","to":"0xb88585c62dea87d736c29f0fd4217f70c07c057f","transactionIndex":"0xdf","value":"0x10a4fa1c3e61800","v":"0x25","r":"0xbe3003f71dc134804a94488bab38476c3c783ef50dfa6825669757e3901656f2","s":"0x186151902e221bba4f3c0e6d83da1bff751dec4520bb4d4e411d3fa71429c984"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xf4a3fefea93abbb34748b07264fd97a86239666f0e42b83327e4bb154af88554","input":"0x","nonce":"0x9d13","to":"0xbe2c3874af4ab4ddb7bf24586fdb6cf13780e453","transactionIndex":"0xe0","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xa6b34a07eb15597019cfd7af199a232a6103ff79ff851cd67ce8379817d56ee8","s":"0x578fe3780418a7c7b5c0abe6ba2916eee7654b11ed204d0df84d5893bd31e417"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd44ef22db1fb7e12e2da4978630583d0371faf280491ba4ea14aa67c05f2f2d3","input":"0x","nonce":"0x9d14","to":"0xa15c242c4311f878eca821af6ca6b2fe2392991a","transactionIndex":"0xe1","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x62ad380c829c8957a7d67a33afd0cbdcf52236b61e0b319f8c44ed8208901179","s":"0x7e7bcb8ce95f10253eabca57b68bfc94094c23da7a15c16a9c3142a8a571ccbc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa5fb48b4ecc1e86facb80d4846465650fe8c27953674f66efeb29edc343a2e96","input":"0x","nonce":"0x9d15","to":"0x1c94dd84c1d0ec757ed568c1676541f039c06a6f","transactionIndex":"0xe2","value":"0xc3d6fc66994000","v":"0x26","r":"0x5ce4bf66e7027de1c39cf920e19fee8f5da51ba6231fa06853a08d8826e2ebf0","s":"0x4d536ff7d2dc81be76ce0b9a2fcbe6e7f0e7e0e92517b94d8edff2c7103a934a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x6949634372f1fe260cbacd3db19bb9f5c61b44bd858a50c3af3dce9fe0ccad46","input":"0x","nonce":"0x9d16","to":"0xb3328cb02b0759d71b1837ede36e5674a77c6da2","transactionIndex":"0xe3","value":"0xd248715f3438c00","v":"0x26","r":"0x6961ab1637e1e2b367c49e9ab0e59f1bb4475acc61feab020b3cc65d470f2b01","s":"0x22531490dd06c32be73504df385bf0b39f17c6b710f04930ce2955b9053aff3e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x5d581a05dc437f6a0d451a6d4f068257abbb2ce0fe1bc98aceb6fcd8e03268ba","input":"0x","nonce":"0x9d17","to":"0x4ad9178b47868752beb5aac9685388cac1f1cb7a","transactionIndex":"0xe4","value":"0xb51ebb2a2df000","v":"0x26","r":"0x360b546750e04cacf502754024ac71be0377edc32c1349b7e7eed2937bb7caaa","s":"0x2fafc99957e967677cc43fc67f8a5fd304a7261a08e67e91f9cec5de4fe28500"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9714470a91c3dc2e7dae6ac9d4152d70272ea323ccde232ea35f9057790c21e4","input":"0x","nonce":"0x9d18","to":"0x8fae8ae3f4431c4d4faba4b4756b45de98759e48","transactionIndex":"0xe5","value":"0x41549e7a9f03400","v":"0x26","r":"0x27208885dbd18638b93026f4c30acf509dd027a5c52d8db1228ac2edd4ab87be","s":"0x4b49789d178fa09a9371e15c18d0aaf1dd172a4af9dcb3364613dd58a863a1cc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa2b3186efa03b1b54d00998aa0d8897cf278678f404a8060816b6cd806629e04","input":"0x","nonce":"0x9d19","to":"0xfc6418f560acae4419be48f7f299f0aa2185f525","transactionIndex":"0xe6","value":"0xdc51de47784c00","v":"0x26","r":"0x12cb0e577acb62d2dc1ec52f0ddf0e113a4b6ac6f9fb5f9b410dd6852ff137e4","s":"0x10787f0526a00e60d31de51b6066e5bfdf9aadf8b0575c7f9485c49477fca7f9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x73200aa7eb57161747d1bd9a2d11917b45bd6d79caa5d26b7344f7a7502952ef","input":"0x","nonce":"0x9d1a","to":"0xc4a11e92427a5554364ac7e314670adce6c9422c","transactionIndex":"0xe7","value":"0x17c1adfe0b47000","v":"0x26","r":"0xe1faccd7a599b682df63b68836e6a4f4d45223b8ebf2446e7deeed2d01a6201","s":"0x487e703d6e11239513aba25bbfd20b31cf76871b9437a7c16e2faf35f32f939"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x954b6bfcc16c66d3d3cc657348b4bbcc6d4a06f6f9ba779ce4eb96e483634352","input":"0x","nonce":"0x9d1b","to":"0xc11990d182af08898b244393d729d082c04d1e16","transactionIndex":"0xe8","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x701fc2458fc289813b711df4cf032cc35b121fa830dd09e0d6475ee6ba8123f8","s":"0x1abc1a548024efc3d7827607408b1a001856f5490e7a22039e6903341aec37cc"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x91df18865f6a5df609741a128228d2aebdf09aa37b15f97f641e8d9dd88ba034","input":"0x","nonce":"0x9d1c","to":"0xcc5ffda4eb02a170d7182d0dd4f75f25c564ba11","transactionIndex":"0xe9","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x34c6e45d650823ff297591136710152176d81c093e1990da19a1bc4725b18cb1","s":"0x206c8b68f07b35099132551e9b10509585ff4f702f4d05951e71f709ed2b761"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x163d3003030a7a4d384acfc07e3d32ce388749efb2f6ecae44af7de5e3730894","input":"0x","nonce":"0x9d1d","to":"0xf2355719899495d08429900681a14bca060d9879","transactionIndex":"0xea","value":"0xb78eb0a0ba4400","v":"0x26","r":"0xfae4248749423ab2587efc0bb3091a8507e6910ea118f35a0ff44967f2a4d732","s":"0x4f15fc50959fa68880e1c38bc0d75ac501a1cfab2f8dd3b8856ba71f50efbc3c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8c59316f9c6cdc642313e218d1966894991c706395d7b70e4c8c6f73eb3c06eb","input":"0x","nonce":"0x9d1e","to":"0x0ae5b31bb58974b41961d06a865e8ffc1751a3bf","transactionIndex":"0xeb","value":"0x17c1adfe0b47000","v":"0x25","r":"0xcff9d3c7dbfe980e210d13ce817a6852e844b1a281b1df27a89608e655272724","s":"0x4af41ea19ac9119abf9befae40e384be08144a5dea0bab0a6d7ef94371790bf4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x34d76ba55e293dc71439735338540abc154a6b934fdbc1d9a887aeb8e6b00055","input":"0x","nonce":"0x9d1f","to":"0x9be6e5003ebd8c12fc8453adc0bea7c040907145","transactionIndex":"0xec","value":"0xc3d6fc66994000","v":"0x26","r":"0xc9362d7253138a9f4851835862970bc14af545d5414033b0be3d8df042b2263e","s":"0x3f8a0678a5a528458c63e08a0a9412d656bdb972bba090416fa895aefdde73a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x754bbd76215fcf913198131686c42b14790cf6d231b3299dd7d173bcc2989d49","input":"0x","nonce":"0x9d20","to":"0x493ed6708e1709d51aae0f4635dccfe695e17a42","transactionIndex":"0xed","value":"0x1ee22ef601b6400","v":"0x25","r":"0xec291fdd9183fb067ba1297fab3ee2f44eefddab9a84be982145e01c3b1ac225","s":"0x7dbd0d4dbc7a551ab7daaef7b3dff1b4af48d0f666741740222c2af2d7bd233a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xeabc4b6188418f2dad5b245a39c6ffd8771ed87f9d453d254dff1af9371b4a0b","input":"0x","nonce":"0x9d21","to":"0xe0dd007e4c1858198d5333188d1e51a50fe7fa24","transactionIndex":"0xee","value":"0xbf373008f58000","v":"0x26","r":"0x53d0edbefcbf73c8e024d30293fd1ebbbde41f2e0559fb6505256c89b2d404a0","s":"0x4b70ff90da557741e490c44b5d6187541378d038383b0cadf07ae7b122d538c9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8f07bc246af8f3ddaed18a610cf6c270ef1c2dfe109e822e544946c9135b4b67","input":"0x","nonce":"0x9d22","to":"0x840a86928ecc07417570a52a2fadfa07b92fa249","transactionIndex":"0xef","value":"0xc3d6fc66994000","v":"0x25","r":"0x4898903d6c230f74ba3e9ef279ac0ebf89ec7fee7cee57f484449d0c00934f43","s":"0x5bb1e090a72b44aca5108e59616396d53fafa5a099276340c8714ad151f05095"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x69c58c9688d17f6e3a41bb507d45a8a3e466f8288e3b946ad4efca1d45ebb973","input":"0x","nonce":"0x9d23","to":"0xbdaaec2bd3aaa7d7dc7bbb1632ea8407a0400ac8","transactionIndex":"0xf0","value":"0x2f91cda05a5a800","v":"0x25","r":"0x13b6bc5a8cc3e3f573082bf9c5a116676005af6cfa83b09637fa6d5d49ff69eb","s":"0x30d62a01c5facfafe6aa9ec72420df4ab58960c035efc82cb0d74b4dbe47ffe3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x55c64f655d8dea53f2ce64166fd895407dd9137d1c6ab71b5557521b013762cb","input":"0x","nonce":"0x9d24","to":"0xab7cd1de895d8f6acf3a33dc0cff1dbc5d3cf8f8","transactionIndex":"0xf1","value":"0x243a8fb94ab9400","v":"0x26","r":"0xe571d5ec1a3ad2f7ee2e4921ec990fee738f790b8b9cbaa41ce6199dc271557e","s":"0x4281a9021c3baee73922944a32640e83b563d12f1ad7d7080d0f56226957d613"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7e9e4fc7893cf0a9622eb220c1fda03f6de22989ed09c07b5d4e962280a26fa5","input":"0x","nonce":"0x9d25","to":"0x0ed7fd37ac6d0cd11556a390ef5755cfe7e11ee4","transactionIndex":"0xf2","value":"0xb5ab95a5840c00","v":"0x25","r":"0x8c5ecc5b3eee2219e9abace46b7512f1cfd545342db9bb86055a00ad4d01a513","s":"0x29a5fbe512591d06682e59ef9c6189d3bf8452363d2e4b9bf306dc0d0ef8532e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x01da483cc7dd23a9eb7789d099a98dd7defc20ce93445cc3f9b27a3c45b88567","input":"0x","nonce":"0x9d26","to":"0xf90454bbf19f7a77f6b0af28be2c5f488f494246","transactionIndex":"0xf3","value":"0xb236dafb37b800","v":"0x25","r":"0x296b8e9e002db193de14cbac2dba792ac3e10aac099e516efcb426ce0fffa1a8","s":"0x5cb237747f3d97eb69fd34c77464b048ab8a130d35eff139a69f99ebb3a67bfb"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x11415c478db04180237ee25f0d9f25051d28b253fb036a67191d14c794f0aa7c","input":"0x","nonce":"0x9d27","to":"0x13e36fd42db0af1af5daf99cccdbd5d3abd84c75","transactionIndex":"0xf4","value":"0x3c4843281346c00","v":"0x26","r":"0x4a9805021177372d9e45eb50f1c7215124f767adbe27f6d50239745afbaaf2e0","s":"0xc32497ec2419af80fd422f8b513bcf2aaf694b19e82f5be710015ed47be6cc2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9d0098cc74b6c0fd63e186cd7082f1230532cd8c7139c059b3be9418744e7e24","input":"0x","nonce":"0x9d28","to":"0x1aa676e5951dc81d5d423448eab4be659bff8af9","transactionIndex":"0xf5","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xb66285b17cbf0145ec370a5e9f38c931b77d0c2b9dbc1cb105eae92df68cb3d1","s":"0x516b4cf19aa021d5d4547d8b107eab6a71be2141d0e09735835537e32179fb64"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x38022390b5784a49bb4f7b77abeae78d2a4929be84390600a273b3c60e71427f","input":"0x","nonce":"0x9d29","to":"0x137ae004483aa3930b86d70c61e2704a8ed15f92","transactionIndex":"0xf6","value":"0xc78e1bb3f72400","v":"0x26","r":"0x619b7886c3459782bb7a12d9819792a9830ef4006aff306494f513d25adb63ca","s":"0x20e165e8f873c59618ec2f45177391a3d329987f2f269ae849f6449affd432f2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbdd61eb9abee735e5f27d7183ce30a25996e14eaed40604b316b0612795a6c64","input":"0x","nonce":"0x9d2a","to":"0x91a5d62b126dfaad6c9f84208fa7265e35f654e5","transactionIndex":"0xf7","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x1659de2ebd90e88a745c6b6fed1781f709d14740b44cd08cf2a4b89b38120842","s":"0x4ba65b21017b960635bb239784b26ca9cf9cf619b3ebaea46f549a39f813073e"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x4054d4a66cc62b44cbd482e7a7c9a3d47961ee4c92f01383dd4bd217af49f029","input":"0x","nonce":"0x9d2b","to":"0x653df565ec7fd75e6d11c93d2e418df3059c42a2","transactionIndex":"0xf8","value":"0xbfd66e5a367400","v":"0x25","r":"0xb996499cc7de072f5aa5e00195b371b10600226e422fbcce26a66b19e895b460","s":"0x6774c8b83b1c4e02bdc628ac26536e44551b4c0d16f2c69adcba53094af21361"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x14feb3ec93a5784e8e8ea8086c8b0b14bc8a1ba18c2c020b0faca2a3282f233f","input":"0x","nonce":"0x9d2c","to":"0x48ce0a4b875f12a67491cfff924d6ffa26a15095","transactionIndex":"0xf9","value":"0x10488f2b8489c00","v":"0x26","r":"0x5f1487c5db3f0f6810fd94a2358417e199f37fd8b83b12dc730ec254ad66ecc1","s":"0x6d0b167e2cdc8a783b0c4d344ae2f53c8506918c7507d4b786a1829e1b930b1d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbe8033c700e32c4cc9357f236c22e38b46248bc969c1877b1edd5667caa0275e","input":"0x","nonce":"0x9d2d","to":"0xd4f2d58076871ab57b6bfacefc77d89e25520c7b","transactionIndex":"0xfa","value":"0xbfd66e5a367400","v":"0x25","r":"0xaae12497417754109c27af289a5c076bb921bc128502b05afd3707bcde72315c","s":"0x1bf7d8b4fd7ac51a136b09bfaa77baf90adf1a54c06e74e5958c4afe12f7583a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xa1f25d0f7e6bf6871bd49184e89c6281f69df9533d22f1fd85aa6a91aa86bcc6","input":"0x","nonce":"0x9d2e","to":"0xc09c32d40513584b21c1cf9c281ef0606512c2cc","transactionIndex":"0xfb","value":"0xd10ec777941000","v":"0x25","r":"0x8d560c372f294da15f779d0dac2e381cd73571c65f311d7fb681fd73a1424981","s":"0xcfefef34555e00a3be0a99ae73b599ea5af3af892b68305e3eabb1a5c4cd8cb"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9b8740e51e99cfd9aeac76684a2aadaf8a4becb51680e8acf6e67d7885f6ced2","input":"0x","nonce":"0x9d2f","to":"0x466521aebc4b3d385fe15ad735aaea12112b127a","transactionIndex":"0xfc","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xe773f734e166160eab39e86abe317b09fa87dda79dfbf5d6b1549c50e2efbd80","s":"0x20fa53a197715b410e631c5ea0ce32734e4611733104d5d44bfa42eeb50ad84"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x61aa8b97e2c95243396ad3d8987a9514f3cc34cd35a7f2e5ec60625c446c713c","input":"0x","nonce":"0x9d30","to":"0xdb909d1093c83d34ada5d9627560f467344872d2","transactionIndex":"0xfd","value":"0xb63eec35f82c00","v":"0x26","r":"0x2675c0ab6ab44114434e174fd737ad8ebdca6a6a75bd1e6042af22abc7b77095","s":"0x562f6f3642db195e37855c3d8451c82d2e64b1df0de6bb041faa4563ab3d1711"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xaaf865c9b11a37d154dc3a0d82a8b5751ae480cea7dc78144815014a1d47a131","input":"0x","nonce":"0x9d31","to":"0x890b451b2ff30f1da26e5ff815b8e2903609e78f","transactionIndex":"0xfe","value":"0xbca080a4a2e400","v":"0x26","r":"0x927281130e5da54aeafbaefdefba33888fa696a6ae4011397db46e32556bcffe","s":"0x63537c39427a59de124acce253ec54eb36f7f1350e6a31f4da019391d11b52f4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x04b414f36ce448d4382e29c61acc81cd1ff5397fab63fa3e520d367d0b12c907","input":"0x","nonce":"0x9d32","to":"0xf060b2a6f01a05eee307ae90201afa5b13f6670e","transactionIndex":"0xff","value":"0x1c8203dfd9bd000","v":"0x26","r":"0x4c1b44608814b2c80472721e83e9ca5471b48226e8a697ac530c91f90a64a0c7","s":"0x2efd8eb43d46ad4a08c341d855b2feac58d7571ad609155d79ff8f81f1c5b46d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x84835297b78c0fd5b83761e87046aa80c5c4b25028172a6af2e3c3845fe3a973","input":"0x","nonce":"0x9d33","to":"0xe0e6c781b8cba08bc8407eac0101b668d1fa6f49","transactionIndex":"0x100","value":"0xc495a958603400","v":"0x26","r":"0x981b6223c9d3c319716da3cf057da84acf0fef897f4003d8a362d7bda42247db","s":"0x66be134c4bc432125209b5056ef274b7423bcac7cc398cf60b83aaff7b95469f"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xdac06da3dfb3f3f6a0f9c79038e3d08ee33f525ae9868ca0af5d5a9dbbf39a08","input":"0x","nonce":"0x9d34","to":"0xc70f9ad86ccf27090c331a20c11e09e161badb35","transactionIndex":"0x101","value":"0xb555380c72ac00","v":"0x26","r":"0xdfac45d18340cdbe65b97e769ae1845841e580698feaa730b7357211d222a305","s":"0x2a60cb17e470d16b323026e3f048f0a6de30b2629bbfcbdbae5d264f8e51e019"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x27356a5d6167fbf721b223e0be046c9214449802e55498426acdcd2dc96b69bb","input":"0x","nonce":"0x9d35","to":"0x58d0bf6c45fd77edba9e0ad3e46e69dbe1ab2d15","transactionIndex":"0x102","value":"0xbff52062f95000","v":"0x26","r":"0xed00d8e5d37a76921bc78481e6b0f4a137b4a03b151b3a6bac8962484f077778","s":"0x5c9229481247f3af1cf80f7cf0a8292594e35093e038b5c3afeca3a167d2ec77"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xba4819c207044620e3989e499e61e7c03197864bb8b6e815e3691079763695ac","input":"0x","nonce":"0x9d36","to":"0xeb53460104b5b5ce5add099abb75932da9904af5","transactionIndex":"0x103","value":"0xe07fdf4fb6c6c00","v":"0x26","r":"0x86f96350bea35565fb74884e356f9810c9ce1b75502292ecd311a286a4b7fe2d","s":"0x5d234756ad837a45d9c67b9d85f25eadb0fa0e839746a3abf12660b923e07fc2"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xf366be96a8c24c2c5939135c036e1dabc81b8b22118b68ce18600795069685df","input":"0x","nonce":"0x9d37","to":"0x6a16c0c1fef68d68711cc9b35fd5491e89bb2506","transactionIndex":"0x104","value":"0xc3d6fc66994000","v":"0x26","r":"0xeb1e4254f3d1f1c8acaa79c750c3928f2327fd88cf2c02eeae75b6ca74986cea","s":"0x2e700cf3266f445e9d68b9bae03798d5e052c514c1d4bd08703fabae97ca69d9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x77f3beb8f13797edf0979091a9894abc3a2d37ad00ea6c2283d364b2bbc53749","input":"0x","nonce":"0x9d38","to":"0x3b88c148c85f265d0cc2e1bbd22706440266fcc0","transactionIndex":"0x105","value":"0xc3d6fc66994000","v":"0x26","r":"0xa850344302e0bf95410b8307c6bf967b0abdff41f46d03d78332f56c98e4b61c","s":"0x975632db6f8f95168bfdf0f14b46b02d9841235cbb0bc8c2be6833b6e48700b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe8e77fc19f52a337633d20318dac2583b10094a5d886aa12ba86b40d8c445b99","input":"0x","nonce":"0x9d39","to":"0xb89ed0d7c1bab4562d6c9f62ae46e1ca978ac3d7","transactionIndex":"0x106","value":"0xc160e100a6dc00","v":"0x26","r":"0xe857a3fa7b82349a1e49abb8cbca936d234737a4fd9db5fe43af59054e8cf806","s":"0x4530fc86a8dfefe73a8edd8ade26867b0cf704c56a63902bbdd87f8cf2f633c5"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x39b8dcaf327d4494a5d7e334924f063f5115b8f88d5d3e0fb11120857154cf7b","input":"0x","nonce":"0x9d3a","to":"0xbd630d86d647dd1cf11693c8cf1712431596e757","transactionIndex":"0x107","value":"0x3b6432fb1c31800","v":"0x26","r":"0xc962522d9db8c32ec37d6e1d2542f92999d7c92748a1f79d5d535b1f0ab64e7","s":"0x2d9784082a45fa85b38dbb5bc86b1e695bf3461c3319526f7b00524e77b47180"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8687c226e36b53a0e243b950f842f8063252a8131b8dcf5bced13a3d374460b7","input":"0x","nonce":"0x9d3b","to":"0xe8beb6602e9fa7261fb7217772e74a0e0eff5b32","transactionIndex":"0x108","value":"0x274d60dc4dc9000","v":"0x26","r":"0xcc877996f15ea692f268ec668049d9f1e9e5d4e06d294bdedc0e5dd849c044f6","s":"0x7894390aad202383f3513e0280e368b8806b3c84457fcda33865124905fcd2ce"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xd3c6851ad1b73607f350e94caac79d6bf8164db95e2550a176c17c82d686a436","input":"0x","nonce":"0x9d3c","to":"0x7259671a99d6727afc719b6be335b3d12f23315a","transactionIndex":"0x109","value":"0xb3d90a82e2a800","v":"0x26","r":"0xe80d30a2e0221d11e8c8aeeed9415b61a46b8f75717f520757f0a04a30dcb2a7","s":"0x6e8e19c90a794ddcadfe87c155fa907dd120e78230442a8fdd84a3eaad6b8fb9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe3c463f1d97b6783e4d3bab38371467db884276dc506b28d3f499b7dc8633d0f","input":"0x","nonce":"0x9d3d","to":"0x3fa58fe438957db67fec7d98830733cc20ef78e1","transactionIndex":"0x10a","value":"0xbef19c7da23800","v":"0x25","r":"0x12b6c4b531ea1ed93893813ca4ba83711ef77f0aeb5d50496338d61ed4a8073f","s":"0x615ef3572bccaa7a2b67e2016fe27cd5e92476be30dbdd896421a0e885462987"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xdf8d0be70c7f0c1b363ce33d040f854db2dd283018bca934592bf5a0bcd7d9c7","input":"0x","nonce":"0x9d3e","to":"0xc6484480165ad0be7837d9699879f471598f47fb","transactionIndex":"0x10b","value":"0xb213bd63e20400","v":"0x25","r":"0x88d47a6ff2e2adff1b749dc2d98ecfcccc34a431a12f6e6c8f609afaca81e292","s":"0x2b7b96247e151a7d80e1cb2007328c35640b5e88d248861d0c04aa6d5a77dffa"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x31b9b1f7476fec5dfd5fd18d4215a91c59e8f6347890945f4c8cd0efb7bd68b5","input":"0x","nonce":"0x9d3f","to":"0xdf918af8a6fcea8aca4e41033a83f376822c5af3","transactionIndex":"0x10c","value":"0xc2fe6d18a19400","v":"0x25","r":"0xd4604addbb94448503460ff0817f0f282ca9d6593502a55f4a9b614cb0da1862","s":"0x72822737b98c32e340abc5e1d6ee981b5744bfc10a561b9042c9cd4256ff9923"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xeb29d192acdb57fc681038476f689fab44f12b7c75016085f6c3841bdd5081c8","input":"0x","nonce":"0x9d40","to":"0xb8f4c6ebc5adee28bfddfcfb4b99969a3d4d3f00","transactionIndex":"0x10d","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x6a7142f6a976e021731d4565247432a41c9480eea32b2a92b8379242a5582d47","s":"0x1c919c1ed41b784fd02b03f5c34db4e11d073c741683b25e80271cdd277612e7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x68418311e4bd7dd19b15b5c38344aace68b5eedec39aa24835e76e17ab44e3f9","input":"0x","nonce":"0x9d41","to":"0x171125195a8be9c1bfa055ea4cfd111e5ddcbf24","transactionIndex":"0x10e","value":"0x20278dafea97800","v":"0x25","r":"0xdd1b1aef77828c1775ea8fe40e284d38e61215af17a7f71f275853b212091fa5","s":"0x16cf60f614ffa64806b57a6395392fdcc682ee642b5628fbc5efdf09b9a63af1"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xff5a78bf3cdf7ceefb03d933c01ef9d7422bc3560ac872bc2f7e31ae06d610ef","input":"0x","nonce":"0x9d42","to":"0x778ad400d43bd2f7f41e3ff77093bad2cd91be12","transactionIndex":"0x10f","value":"0xc78e1bb3f72400","v":"0x25","r":"0x6928d8a9aa1c15cc31debd4c39279dbdddc877124acf5e9002e75ea90c581a74","s":"0x6cf6d08af094cae7180a0cde1a328c4b224eb6a8d794380ae01e52823cc548ca"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc5caf93d7b27eb0a5d0a0d48df676b8c8788867566e4e23924746ecfefe05e31","input":"0x","nonce":"0x9d43","to":"0x986c672311415938d7586e79a5f638f2b29a3927","transactionIndex":"0x110","value":"0xba0c3c94ab3000","v":"0x26","r":"0x5732311fa0e31c3b8d3d2247ec44072c3ac4b3058b8f8393d3b397c0a8945742","s":"0x492aba48035675bb962b3b9af6d9e7f41251e68982e7f109a065452d3df106b9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x88bdc57f8dd898de0d50a5c5e15648570f2059b4154123923bf0d1676f4ac029","input":"0x","nonce":"0x9d44","to":"0x4c647225087bfff6da1536b4d3542ebf13cc46ba","transactionIndex":"0x111","value":"0x7cb8d1507a76800","v":"0x26","r":"0x746f8df66a4584f2defc5b791ef251bc4a67472c01d173aed64fe7b4a92517af","s":"0x4a20a791bbd9eaa7ce682068fc770ef5139feaafa37d8a00c4a8a694a87c0953"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe79ceed82b17fc949cfbc6136dc826ce72d5b67e9ce4a922a586697ae4e6873e","input":"0x","nonce":"0x9d45","to":"0x4798994ff85419670aa86bcf026e7c5976833249","transactionIndex":"0x112","value":"0x4fe1a5db4928400","v":"0x26","r":"0x2fdf8b414249d409056a19be0b0b55df2d00a18ce9cfe9a63841bceb9ae0eda2","s":"0x7437f0548a236bb86ee90e3789c7167bd60197065a93da26a006efad3600a0f3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc2af406032f7e8684cf7de96048c604d2fff9e3e326c66be0a8ba7b901510b87","input":"0x","nonce":"0x9d46","to":"0x4bddbd1cbe7aaa14d1461178e2cf4943c12fa20b","transactionIndex":"0x113","value":"0x1db2197d8e18c00","v":"0x25","r":"0x88e7c916c1699248231e7b0b01d6045d64efdf5c3e910337a3f1a395b87d1dc6","s":"0x755e8ca9e5bc9abf2a5b086fbdb37c05e505a118c28e58efdbfd4d1da854da2a"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x19ed7609e5fc47fa26b198bd9b58365c4b6067ad02fcc6547b768fa5080be8ba","input":"0x","nonce":"0x9d47","to":"0x60c977bcf64316c88fdba52391d0dda45b129352","transactionIndex":"0x114","value":"0x22726f849d4d000","v":"0x26","r":"0x81b8c25c00abc5654b307058428192835818c810de464c3bb0ad6db58756951","s":"0x4deb54a63c82641983d8497dd69544755933718cc892165a5bddfd5cfc069dfe"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9c432dca59d47809df0c50b93fafe25c5edac9497617b55629d714dca7373596","input":"0x","nonce":"0x9d48","to":"0x374547eed2c3738f09f591fff7bfa417b9a75901","transactionIndex":"0x115","value":"0xc0aa6cd8dd0800","v":"0x26","r":"0xa987421bfb2d3b853b84891b6f85216d66c22c2b2fca15f39150f912ccecf727","s":"0x7f10ab7897ab16da3797ea41272558d65d7def38be91e4c1003348051f412185"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9c5cd08d5ceb6f4d4c3863046b643f3fafa9bbb351533abc71debf1687c18c0e","input":"0x","nonce":"0x9d49","to":"0x3c068db8f6ef4182e75565f5d37eaa8543177c25","transactionIndex":"0x116","value":"0x11de480c08dc400","v":"0x26","r":"0x3525843199367aaa9044153ae0d85e54e3707cb7698cca38097876b02dcd068a","s":"0x77ddfed3ea1e5f7943b2d89610d2371e2c83dc62c00267f2f94b6c0cbb21d962"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3d22ae6592e88c4ed761f2b9ff688f1aa41982a1bb370ecedf49019843c94630","input":"0x","nonce":"0x9d4a","to":"0xfb3de54d4a6130598e8ff6a039ef30f0b59082aa","transactionIndex":"0x117","value":"0xf711768607c000","v":"0x26","r":"0x2acfc1043321833c91b0b59efc785cd3f6cbdf19dd3419bc2789cec5212e5ebe","s":"0x62460ef4770c05061fa67960019f181056798b8db278626e22851a7856dc0132"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x689d96eb460e8e30e8ea87d0b98a647c0edfcacd594cc5e6eaa1e062cc77b313","input":"0x","nonce":"0x9d4b","to":"0x5d795994944b3aee38fe866c8fe77b68d4b55f22","transactionIndex":"0x118","value":"0xbfd66e5a367400","v":"0x26","r":"0xb1742bec9a7df83d804cec1d6655ff3a3e921806e0b6e9a97b84138ef0b1d075","s":"0x59c1eda35bccbceb17161743d4f44788f7654f1f92afe15cf03ac4cd66d57ba6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x0ecdf674c318bd00f62fbe5413466ec13175c523cb0cb16c4122df6d4d2c24f7","input":"0x","nonce":"0x9d4c","to":"0xe417e7027b38ba90f4250deb71ee602aea6de5c8","transactionIndex":"0x119","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xaca1fc6427a7e3c699b3669cc6ff3ba6c8f2cfa573f97091424997be5d752cc","s":"0x475a62702cd690b0ef846b65868bbb2d726938ff7c2e6b1aa394c49298535c15"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3dff56ba42771c98a208c77ddf52d77ca3cb19a47392795f5a109b4ed50aaa20","input":"0x","nonce":"0x9d4d","to":"0xf3bc692f1b8a25495c63a5e21906ed7c16cc976a","transactionIndex":"0x11a","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xef42a333834e0ff5c47ac0a96651e3701d2c5f59e424d7f22f0512ed2ba55127","s":"0x535fa706628decb9b4bf85420b8d25eaf94a67eb0d0749b8746762f61c84ca10"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xcdf47726cea581aa0378b01dc18fecc863fbdcf375ca39c5e2bbffe1bfecadd1","input":"0x","nonce":"0x9d4e","to":"0x88483fbc3eac6a4c27e180394cdfe01780b971d9","transactionIndex":"0x11b","value":"0x3b6432fb1c31800","v":"0x26","r":"0x399b92ff667f02a249af27e3fb783eedf9a8fd48745b6609bd0e81641b88c176","s":"0x7a15dda763017a4d4962e716d4e153fa04d9021955250863828c80a5b4a1f35c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7cd35a6c78cdcb0d0cdf2976c4ccc8bc22675d40f87b5be6e309f05f138deebe","input":"0x","nonce":"0x9d4f","to":"0xf31b2602804d986d6298f06f7850fbb1dee44c07","transactionIndex":"0x11c","value":"0x11d1427e8875400","v":"0x26","r":"0x6182f241240e0a693ae127473d0632b75192ec86f25abcd3093d510de46eb7ac","s":"0x71da8f4e8c4df4c4f2cc6489c3799199e7a4dae6be816b0a99cc9338c1ead5c4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xb0628801347233aad9abf0bd2d4cd745cd636e180c573d99f902d467585cb655","input":"0x","nonce":"0x9d50","to":"0x3007abf58617a21fa38383a8d978cf12824e5083","transactionIndex":"0x11d","value":"0xc3d6fc66994000","v":"0x26","r":"0x968d3a6101bf5c9b4d2696815b70d9c2058f9bc771cdb070a191e067e32388ed","s":"0x1e5188201fde674eda698ac00137288ea1c128b00f55ba120d0a1acb47663a3b"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x9cd75bbf02e58624edc86f7fb73648c527dffd236c6b8fdd6809c60f39c69290","input":"0x","nonce":"0x9d51","to":"0xed2fee621473e633b7ae70b35d5a371745b5d7c0","transactionIndex":"0x11e","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x57381d57fbfd2bd4de4581dbef6e526025be89d3b909397b94ab9101c67b240e","s":"0x72cdb9ee50a130bab459b7b5d3571fbaf65143bb4cb92b13d7523e12828233e3"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8295129f3e7f07933f31954ac3119b79d397f4a1442ba43dd8aece46eafad0bb","input":"0x","nonce":"0x9d52","to":"0x996af40e6f835cfe4f6ef7901e841c638183255c","transactionIndex":"0x11f","value":"0x17c1adfe0b47000","v":"0x25","r":"0x3acf5d97079faa59d7f10eb15cac69d606055e9490be84cce0d3f9e9da21b783","s":"0x1ded8203056f75ce13ab52d94a1d7d199b603ad8560a59841e175e6c47766dd7"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x8c4793c0372011a897f8c4114ce8fcdfd02cb568815fba4245a8612c840d22f3","input":"0x","nonce":"0x9d53","to":"0x6b6a72cc53bf65645cd90378ab7235344f57f3d1","transactionIndex":"0x120","value":"0x14316d94b06e800","v":"0x25","r":"0xe1a5e98c7f70e0d6537fe3ddee2c41a5620dc9f485ba57b1b0da9bc19f257fb0","s":"0x14437aff3705bbd139d76c9ac83a00d02ca5dcc5c1deda0855ce506ccb78cbf4"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x527a3a6945c5800af57396b53c89f99d9bca46d64f6b266aa76e3abb7825bb51","input":"0x","nonce":"0x9d54","to":"0x05b03715ab29e54485ee847b926921905779cd4e","transactionIndex":"0x121","value":"0xe8d3be8f66d400","v":"0x26","r":"0x204f995758024eff4af8904d07489f365563e631b88192ab3b19ed98c9729a3","s":"0x77d1b4ee8746bdbb5a3450e3cb5b559095bb67fab461d3d17334ca2749dd70e6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x20185783ecb691a6e0d0e315fa4af57310596745b2f1dd34f8c05418f8e49e67","input":"0x","nonce":"0x9d55","to":"0x84f26e299f3ffcc72e30bcc17057379b9b059450","transactionIndex":"0x122","value":"0xbe0d6ff05a3800","v":"0x25","r":"0x7aea1f615f63ca364d9add4f75f3260367fcb01d072bbf512895ffcfb4d461dc","s":"0x20107d0a72dda0f2e1e76ea3e2bcc6c9afca31c0c54243b6376e1028279c7a32"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xf67b6ef1fd47f4d11e54fa7e9455da9bceb2546bfd7dc8746d0fc90463e29ba2","input":"0x","nonce":"0x9d56","to":"0x989e5a5f88b26d0d8cdb5d575ae4582010cbd9ff","transactionIndex":"0x123","value":"0xbe0d6ff05a3800","v":"0x26","r":"0x1be2409382789e78f0c8415b49b98c9842b7ffe8984594b821c38eae4d1b404e","s":"0xab5b5427ddf4e70ef1bbc627ed1789209c307f86e6805f53fadb0bc6c617317"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x125fb4f1f64f0e3a26fed148a7ddefa52ef94e328bc85d203e4d9f93835d6334","input":"0x","nonce":"0x9d57","to":"0x1bfbeb992ded2e68e6783110048053279c27aaee","transactionIndex":"0x124","value":"0xcda1be8c933400","v":"0x25","r":"0x6eee9dae37a2eb68c5ad7413f36caf03eee0916190894f399dcb101a608be46a","s":"0x6ed3cb6e041a39b01d5a617f74f83f95f092e4504ba8935f3686ca6f75b97f65"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x206ddd0eb0467b94918220c9194ea76c4fd38cd7f1270ba4055bc062947a09e2","input":"0x","nonce":"0x9d58","to":"0x3094c5a507916ad1d30b32704fcba3c781b3b038","transactionIndex":"0x125","value":"0xbca080a4a2e400","v":"0x25","r":"0x12c952bcaa4a479491966d189ab00e94787004433d1cf3f27e44db1533b4fb89","s":"0x1ec37deb9c3c19ab870e9d8d0a28664ba5cdb24827cb415387024752d32ece86"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc8fcbe49bd48d18f1e643d9c30f7eff5b91580ecf18e3cf51a64dc33efef8945","input":"0x","nonce":"0x9d59","to":"0xc1e6d014845c3e9be49b7c7ff404d57eb70bde55","transactionIndex":"0x126","value":"0xb26646c5657000","v":"0x26","r":"0xfc6a142536a53f2c193415f71b30e70873616851a326ff8603d0e2f94bba5e55","s":"0xb6bb5f256d1ac716eeec46450d0be5bc097c1cea3893942edf19c236eda5404"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x808632c02997d355498cfd0958bc6d6234ed895c5714f8038b8156e77092a1dd","input":"0x","nonce":"0x9d5a","to":"0x6eec88f110b7634b7c454ecf6db811bb4e20d1a6","transactionIndex":"0x127","value":"0x30546aba3df2800","v":"0x25","r":"0x5efc9d9e4413f191250d1fa3649568081b18438d460469f38cdf4c4c64e21395","s":"0x548dcec1f369ed12e15e7853b651a9bf123255d7dff536e9651a0732319dba65"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xe501873db84664299077c024d19d5469c9e133f5e9bd473c9f83e1fcc55be399","input":"0x","nonce":"0x9d5b","to":"0x5e27e82fde06a884b709d688a3b054cfbc5d92f3","transactionIndex":"0x128","value":"0xb497a2803e9800","v":"0x26","r":"0x9df43eb8a4464fbf55658e8a1b11acaba33cbb90b8a000a14bd448f1d004799c","s":"0x52e6890fb71ee8e65f2d5127eac2fe795a204455b29909472343477a216c06d"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x3c4957db98859d5b73191adf0adc2721f7fbb1cdb2b89313b7497f2534539622","input":"0x","nonce":"0x9d5c","to":"0x4b916d1e67a42e29365ca2310da3c5c2b4956bb4","transactionIndex":"0x129","value":"0x1762a743bf0e000","v":"0x25","r":"0x2272d8f5f8367dc892ad8fc4d7faac48ae1803eb1cd36f6eed5fdc6c4a40ac9c","s":"0x7e6d5fae5c321780cfd6ea79dc1a2b84ae259128ae1b2b68df70e567d6acc327"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xbca55fac4feaf192382e16e23b7c208e30c86a232a3e217ce03105ce776d4023","input":"0x","nonce":"0x9d5d","to":"0x007ce001301ee96abaa5dbd73e26c1e7b9a16ef5","transactionIndex":"0x12a","value":"0x1e4a2439c7e7800","v":"0x26","r":"0x8fbd9c517cfc6fa4b4d7ea0557f4f60801fb0ae1d955758d03dfce8a7ea068c4","s":"0x6e69a2ed3fa784cea7f7f82e14ed3bd722061607129432d4bb06334b7b80c4ec"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x00a04953f6f4ff9b130e2092117664aa9b8eaedaa7040b0bad7592bb72baafc3","input":"0x","nonce":"0x9d5e","to":"0x0f845cd3da369321429220e6d6e7c3788414e574","transactionIndex":"0x12b","value":"0xb900a526153800","v":"0x25","r":"0x3c743941f289cff5c55e8c83c42dbca60b45919cbede34f337b671bab93de60e","s":"0x12b65e6314dba335249edba1d6bc88caaeec3cddb739203a9b6c40472f0dbfc9"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7f0d62ed1e4e25dabb2f70af5054792df085ca81c0f6ac64121fa97bbb9e39ee","input":"0x","nonce":"0x9d5f","to":"0x3c5b89b3d97e9e56880e4141e24ead232340e4a3","transactionIndex":"0x12c","value":"0xb5d019cc00e800","v":"0x26","r":"0x63972ff9a057b81f446fb119776e16d055399858b236a6d329e45b3452dca643","s":"0x2626b9cc6f3f156b96f5109544afbd5ec4b8ebb125e2b451c3ffdcded38564c6"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xc1c8699fcd8fd3ba414d9d593a3c1de30ed1c03f18a614c5b1f1e2f63de11b8c","input":"0x","nonce":"0x9d60","to":"0xb6bfb46ed86dc95b9a4ac4f9dc54e5eda66f555c","transactionIndex":"0x12d","value":"0x1db2197d8e18c00","v":"0x25","r":"0xa5c8b14f86f3e193d494437b97cfcc44619ccc2fc5ca6930a83efd20f2497443","s":"0x683705920b7dfae3751b43f068e26aba4332a744f7732f362cfcd25334575540"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0xfc57b690a9eae5e5315cefe3dfd24285dce4a4ed089ab9245acf44d3ddabd446","input":"0x","nonce":"0x9d61","to":"0x5304725b936791740704de8795eec60c8bccc3c6","transactionIndex":"0x12e","value":"0xd1cc30c6e63800","v":"0x26","r":"0xa12ad1d0fc0419d5741a47c63b52e007043e5b18d7fc50212138c50fee9adfc7","s":"0x30685b751f0469cc649b7c3cb8c1a7d9fd92c1bdd0448d16063973a43362245c"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x7dcc1722e10be952d4d7c473965d4c82669a7242ea500b4e55ccbbb23777e19e","input":"0x","nonce":"0x9d62","to":"0x5e708092318a8604d4d353d0f1820e256dfbc618","transactionIndex":"0x12f","value":"0xbe0d6ff05a3800","v":"0x26","r":"0xea10d857e88859602a70352d68ee1222554c472fb6be25ffc21afaac7d645bb","s":"0x1f2ce0b79d3297c8d96089d968f0ae94a7d5485ca9e21270f5316dc6fe5dc081"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x89e7853a2fe1e32daeb2c2b06d4cdb1148587c93c049f63bf45c6e302f498c32","input":"0x","nonce":"0x9d63","to":"0x3992c699ddba35a6c706973c6dedbc92eb99462a","transactionIndex":"0x130","value":"0xbe0d6ff05a3800","v":"0x25","r":"0xeec1bdc4d6689af10104b650081fbc49d70b22502afa77b329f7f2d3f617e148","s":"0x1425e1c182fb4496f44e15ef096f634fbdc003003298c3c5220bffc77a7cc804"},{"blockHash":"0x16f37b728aacdb8491eaf8caa84c090285f204d9f6332931144e2fb7fa9c622b","blockNumber":"0x3f29e9","from":"0xfe92a3cf1843b5ec7ccf27b2ae753fac1289fa9d","gas":"0x15f90","gasPrice":"0xee6b2800","hash":"0x983b78add24766c3f9a35cf0c1a471489e92a897d042d0fb8cb4bea11d760015","input":"0x","nonce":"0x9d64","to":"0x2f19943cc9b0352f0cf60924997a49847eef3699","transactionIndex":"0x131","value":"0x12152a80d452c00","v":"0x26","r":"0x13afc637ad749e2aa15f4756ec96dc14504ba5bbadd3dd1f1163aae862e43d1c","s":"0x56876b68b6f58e4c4347e0125aade9cb493bc845eff0037365e3aef08f90452b"}],"transactionsRoot":"0x83975aaf055a868c2d091539397998b8b2a0eb1b25aec5b7aec46515145cafe8","uncles":[]}} diff --git a/statediff/indexer/ipld/test_data/eth-block-body-json-997522 b/statediff/indexer/ipld/test_data/eth-block-body-json-997522 deleted file mode 100644 index 9c385bef3..000000000 --- a/statediff/indexer/ipld/test_data/eth-block-body-json-997522 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","result":{"author":"0x4bb96091ee9d802ed039c4d1a5f6216f90f81b01","difficulty":"0xae22b2113ed","extraData":"0xd783010400844765746887676f312e352e31856c696e7578","gasLimit":"0x2fefd8","gasUsed":"0x5208","hash":"0x79851e1adb52a8c5490da2df5d8c060b1cc44a3b6eeaada2e20edba5a8e84523","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x4bb96091ee9d802ed039c4d1a5f6216f90f81b01","mixHash":"0x2565992ba4dbd7ab3bb08d1da34051ae1d90c79bc637a21aa2f51f6380bf5f6a","nonce":"0xf7a14147c2320b2d","number":"0xf3892","parentHash":"0x8ad6d5cbe7ec75ed71d5153dd58f2fd413b17c398ad2a7d9309459ce884e6c9b","receiptsRoot":"0xa73a95d90de29c66220c8b8da825cf34ae969efc7f9a878d8ed893565e4b4676","sealFields":["0xa02565992ba4dbd7ab3bb08d1da34051ae1d90c79bc637a21aa2f51f6380bf5f6a","0x88f7a14147c2320b2d"],"sha3Uncles":"0x08793b633d0b21b980107f3e3277c6693f2f3739e0c676a238cbe24d9ae6e252","size":"0x6c0","stateRoot":"0x11e5ea49ecbee25a9b8f267492a5d296ac09cf6179b43bc334242d052bac5963","timestamp":"0x56bf10c5","totalDifficulty":"0x629a0a89232bcd5b","transactions":[{"blockHash":"0x79851e1adb52a8c5490da2df5d8c060b1cc44a3b6eeaada2e20edba5a8e84523","blockNumber":"0xf3892","condition":null,"creates":null,"from":"0x4bb96091ee9d802ed039c4d1a5f6216f90f81b01","gas":"0x15f90","gasPrice":"0xa","hash":"0xd0fc6b051f16468862c462c672532427efef537ea3737b25b10716949d0e2228","input":"0x","networkId":null,"nonce":"0x7c37","publicKey":"0xa9177f27b99a4ad938359d77e0dca4b64e7ce3722c835d8087d4eecb27c8a54d59e2917e6b31ec12e44b1064d102d35815f9707af9571f15e92d1b6fbcd207e9","r":"0x76933e91718154f18db2e993bc96e82abd9a0fac2bae284875341cbecafa837b","raw":"0xf86a827c370a83015f909404a6c6a293340fc3f2244d097b0cfd84d5317ba58844b1eec616322c1c801ba076933e91718154f18db2e993bc96e82abd9a0fac2bae284875341cbecafa837ba02f165c2c4b5f4b786a95e106c48bccc7e065647af5a1942025b6fbfafeabbbf6","s":"0x2f165c2c4b5f4b786a95e106c48bccc7e065647af5a1942025b6fbfafeabbbf6","standardV":"0x0","to":"0x04a6c6a293340fc3f2244d097b0cfd84d5317ba5","transactionIndex":"0x0","v":"0x1b","value":"0x44b1eec616322c1c"}],"transactionsRoot":"0x7ab22cfcf6db5d1628ac888c25e6bc49aba2faaa200fc880f800f1db1e8bd3cc","uncles":["0x319e0dc9a53711579c4ba88062c927a0045443cca57625903ef471d760506a94","0x0324272e484e509c3c9e9e75ad8b48c7d34556e6b269dd72331033fd5cdc1b2a"]},"id":1} diff --git a/statediff/indexer/ipld/test_data/eth-block-body-json-999998 b/statediff/indexer/ipld/test_data/eth-block-body-json-999998 deleted file mode 100644 index 5e9d4d77b..000000000 --- a/statediff/indexer/ipld/test_data/eth-block-body-json-999998 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","id":1,"result":{"author":"0xf8b483dba2c3b7176a3da549ad41a48bb3121069","difficulty":"0xb6cb9824e57","extraData":"0xd983010302844765746887676f312e342e328777696e646f7773","gasLimit":"0x2fefd8","gasUsed":"0x3d860","hash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0xf8b483dba2c3b7176a3da549ad41a48bb3121069","mixHash":"0xcaf27314d80cb3e888d32646402d617d8f8379ca23a6b0255e974e407ffdd846","nonce":"0xbc7609306a77d0a2","number":"0xf423e","parentHash":"0xc6fd988b2d086a7b6eee3d25bad453830391014ba268cf6cc5d139741cb51273","receiptsRoot":"0xb0310e47b0cc7d3bb24c65ec21ec0ddf8dcf1672bc9866d6ba67e83d33215568","sealFields":["0xcaf27314d80cb3e888d32646402d617d8f8379ca23a6b0255e974e407ffdd846","0xbc7609306a77d0a2"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x764","stateRoot":"0xee8306f6cebba17153516cb6586de61d6294b49bc5534eb9378acb848907b277","timestamp":"0x56bfb3ed","totalDifficulty":"0x63053e0134c03db1","transactions":[{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x6b5da959786d801c1bedda58f8a071a40f992f03","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x679c178c832194d3f40afbda60421e8cb12f2c6b879a925d2e60b15a2b4d212e","input":"0x","networkId":null,"nonce":"0x111","publicKey":"0x1acb54447b8e66222a23fe267f75e9c7ff46538e5c7b286ee14bcf7ec587f9656c5eb2163e6e3d7dbffd677de22e50d7e067dff34de403d14f5ead2eaf8368a5","r":"0xd5ad60765e2006490e73bf06f4bc9b382b2ea434eb066b60bc4f577cb056603a","raw":"0xf86e820111850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f64f66ddf683000801ca0d5ad60765e2006490e73bf06f4bc9b382b2ea434eb066b60bc4f577cb056603aa00e8d699411b71b08f550a278b05fb1d36174509758ad7370528ae06cb1965a8f","s":"0xe8d699411b71b08f550a278b05fb1d36174509758ad7370528ae06cb1965a8f","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x0","v":"0x1c","value":"0xf64f66ddf683000"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x9da7521d2b2281b3cd477b553a5dc18b58674f07","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xfe3189ab9a3c3aaa97a08e9410b6569f7528e38a4c86077ea20ddf33bd2c7ea5","input":"0x","networkId":null,"nonce":"0x79","publicKey":"0xa150bdb9419cf198e7430552880e8b050a09952ae53d1fd82d70941c6be318f21b98dcf93a974b763948c1621e460ec8cead12080fc2759c2e3e4dc884d2308b","r":"0xb31d8d88bfcf7a3dd705bc78a078c75542ca1a993860a3c95b2af317ee3a4b0d","raw":"0xf86c79850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880ef726f7729a1000801ca0b31d8d88bfcf7a3dd705bc78a078c75542ca1a993860a3c95b2af317ee3a4b0da076d529630cef5d1acf0d649faf281ebcb13768effce3eb02a96f5228ad2f5333","s":"0x76d529630cef5d1acf0d649faf281ebcb13768effce3eb02a96f5228ad2f5333","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x1","v":"0x1c","value":"0xef726f7729a1000"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x707868ea3bfb73007106cfd30f678fdb94d12173","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xcb7508e8703535fbc801146fa3c7d04798d71a9a0e3bb97a0a14beb733559672","input":"0x","networkId":null,"nonce":"0x251","publicKey":"0x030ad57f373be3cd858bb949365b1438b4383b94fa1b95af0ab5337719539fded4494868e0a82e6df40cddeb9415d8e45a6506ea77c1909c71dd2ec37316da0a","r":"0xbfc3a164f96f95f04ec50af58645d5cf51eaa2473872af9bf23ceab22560e8d6","raw":"0xf86e820251850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88881fc1efd41e37c800801ba0bfc3a164f96f95f04ec50af58645d5cf51eaa2473872af9bf23ceab22560e8d6a053f43d489fd83f8e2c9acbf2d14695c63838c18f420021771f111750aac8efba","s":"0x53f43d489fd83f8e2c9acbf2d14695c63838c18f420021771f111750aac8efba","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x2","v":"0x1b","value":"0x1fc1efd41e37c800"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0xd614cc8e7d44e6e5d48b9b3efd5ffec36098f403","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xf333f42badd731da2869ce92d95a255f75ac2a16ed043e6b343ed91d4fdbb579","input":"0x","networkId":null,"nonce":"0x18c","publicKey":"0x34ff9f742cb0c7feaf8109a722d4518fd504abedc4f66e4e6bf8ece0726841c132e5660bbabe5dbe83414cda8ddb5b0aae4a649661747a817cfb79045c22d419","r":"0x32a184bbbe6168a2ebfba1be61d3535d45ce580b130eed8df8f5024be97f5bf8","raw":"0xf86e82018c850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880eeee41c060f2400801ca032a184bbbe6168a2ebfba1be61d3535d45ce580b130eed8df8f5024be97f5bf8a071c020aef32840e0f4f5ea2b095faa4602586a471d33c62563146314c4970a93","s":"0x71c020aef32840e0f4f5ea2b095faa4602586a471d33c62563146314c4970a93","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x3","v":"0x1c","value":"0xeeee41c060f2400"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x078838304c9ee678209ea0959587da9b6f31ebff","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xfa50db902c56466492e9f32fd543edaa1554a47b2e288175c262685df0537106","input":"0x","networkId":null,"nonce":"0xf46","publicKey":"0x866ede0bed987e0e8736cc94244640df1124b5b789b780bc012b936c2559cc630102e32c1c454f92626542eca44802f3ee44437a031fa1eaabcbdf323891eb93","r":"0x9a569d066c62c64ec8b93c6d268499a276fe882289f6090e65748911ec81b256","raw":"0xf86e820f46850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880e62a83e59ffa400801ca09a569d066c62c64ec8b93c6d268499a276fe882289f6090e65748911ec81b256a01e7b9216b86d6a5517b88a2aaef666732c51486214948fdecd89b9043a30750c","s":"0x1e7b9216b86d6a5517b88a2aaef666732c51486214948fdecd89b9043a30750c","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x4","v":"0x1c","value":"0xe62a83e59ffa400"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x460825a3542f4823818184020ba3861da1e26872","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x0b4a6c8459c02f647d8a5c667e292de3e45c5f03558a0e814377e5356ebc6234","input":"0x","networkId":null,"nonce":"0x113","publicKey":"0xee1a6b3dc03e8b5329d99b77c33f64767196ce47236b4c9ee2baa87827a6348488926ae6da54abbf788f5d2602dff65984a60020407e7e8b2da160f32e80a344","r":"0x87842eacb46cc63064a8a8f0932ce3f18c0d27f81a8124d2c3a9f751293b11d0","raw":"0xf86e820113850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880efd50e050f64400801ca087842eacb46cc63064a8a8f0932ce3f18c0d27f81a8124d2c3a9f751293b11d0a04e7678e22ce8ec60a04c36fa5685421a3bf8b9d0ff68280a8f31d6db49629afe","s":"0x4e7678e22ce8ec60a04c36fa5685421a3bf8b9d0ff68280a8f31d6db49629afe","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x5","v":"0x1c","value":"0xefd50e050f64400"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0xa29862fb7f9b37374d0c9062ab52bdd74d1af867","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xc4ea04477167cc599788100bef3306eca140549e747ba531db579eb2a72b1b11","input":"0x","networkId":null,"nonce":"0x59a","publicKey":"0xa3e333b30947a5a685b47b387a92f65a7c5d7b61f6f3016777f720e83fea9fbe5faf6fcb3296e0cd9da6ec9acf30920d5d67c2c4636a79f940b6e2fbe46c14a7","r":"0x90ddc9473c323eebd5c4a35251cd437e62563c883e8e87b141389fde111c5b24","raw":"0xf86e82059a850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f32a22e7fc0f800801ca090ddc9473c323eebd5c4a35251cd437e62563c883e8e87b141389fde111c5b24a039a1dfc3e2b85c74fce62ed7369ac1a62de13b31f4fb47e5fb02232aeefd83f4","s":"0x39a1dfc3e2b85c74fce62ed7369ac1a62de13b31f4fb47e5fb02232aeefd83f4","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x6","v":"0x1c","value":"0xf32a22e7fc0f800"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x771dd02681c793eb34eff34528309e3657f843fb","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xf73f661edcb6e8fc0b48a5bb5292e8b5db8ea911e4664ed1f8af1b2e66f6f585","input":"0x","networkId":null,"nonce":"0x211","publicKey":"0xca6db6e9182a094b5cbfa68741ab7c31450582eb65f1c558798a08b230de63a2f25deedc62d276a5f3eef3526282e28c7efdbbcba8e3ed4dad086c2201f10855","r":"0x7ecfd78b2838d73283f6de62bee1a046830fac75fb5b85ede279dbac097feec6","raw":"0xf86e820211850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d888811a2bd08b7075400801ba07ecfd78b2838d73283f6de62bee1a046830fac75fb5b85ede279dbac097feec6a01cfc1ced8140efc2dc71e217d6693665942ef1424affd7d61c134ed462605922","s":"0x1cfc1ced8140efc2dc71e217d6693665942ef1424affd7d61c134ed462605922","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x7","v":"0x1b","value":"0x11a2bd08b7075400"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0xfbe56e8afb28e097a871b2747800079ad5c29c03","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x9b2569e1b26d29730cf262756a6033834e34345f4a18caa241117747ce8cf746","input":"0x","networkId":null,"nonce":"0x6c","publicKey":"0x7c2ee029ec45aa73444091d1a0c3f830bb7f91797b30a1f53c11a2fbec10f7bb7706a9569350da382cc623c2b65d03b480ae96bc168021da4f0df60146f9e16c","r":"0xb1f3b2754a9189b376bc32d03a1097d4fe0cfaae3e55e45a4249127b9b541399","raw":"0xf86c6c850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f94ad612cf85000801ca0b1f3b2754a9189b376bc32d03a1097d4fe0cfaae3e55e45a4249127b9b541399a025b51f84e621e9193dfb7172dfdea0379bbf8d5d73e25de0e2d0dc50f657e249","s":"0x25b51f84e621e9193dfb7172dfdea0379bbf8d5d73e25de0e2d0dc50f657e249","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x8","v":"0x1c","value":"0xf94ad612cf85000"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0xe6ea7febb65f6fb46dc42dea2f873c67aadb1f72","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x5ac04be22ee89dce8c33f334a41ab05e1cbeca16669003c5ffe2c220f772b097","input":"0x","networkId":null,"nonce":"0x170","publicKey":"0xa6238a7419a3321706c6612d7cc647bce4568ec6ce4a999d081077feac54ec8d1e2627484782a15a4a2c2eca0a71bee25b5a82a7ca74c84b75f89ec2f8bbb5ea","r":"0x3c26e80876f0901d3007a8798f9792d426b6f78079dcd06d91019677850b9356","raw":"0xf86e820170850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d8888115740dac6be2400801ca03c26e80876f0901d3007a8798f9792d426b6f78079dcd06d91019677850b9356a028a644324a777b7beade6b8432d6f95f85112863e08c50bd3e22d1594244014c","s":"0x28a644324a777b7beade6b8432d6f95f85112863e08c50bd3e22d1594244014c","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x9","v":"0x1c","value":"0x115740dac6be2400"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x46a83d066750df27119aa3e314641fb3b3ec6e1afc1e768d3da4ac941a6a0a8d","input":"0x","networkId":null,"nonce":"0x2a11d","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0x85bada12a37f21016e8801d6136cd7793192346a0f29f4fd37782d774378a7df","raw":"0xf8708302a11d850ba43b740083015f90945d65e227f4e7bc798cf62526f4bdd47c82e6a590880eb35d6f4e620c00801ca085bada12a37f21016e8801d6136cd7793192346a0f29f4fd37782d774378a7dfa07e1c78a62e1c16b955dc1b56f657c51fe2dfb739c2c1d11fe4845583706719a8","s":"0x7e1c78a62e1c16b955dc1b56f657c51fe2dfb739c2c1d11fe4845583706719a8","standardV":"0x1","to":"0x5d65e227f4e7bc798cf62526f4bdd47c82e6a590","transactionIndex":"0xa","v":"0x1c","value":"0xeb35d6f4e620c00"},{"blockHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","blockNumber":"0xf423e","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x15dd5bba84901824fb3aa75618a92b7cbacb454c53eaa962a2ca8667acb06a78","input":"0x","networkId":null,"nonce":"0x2a11e","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0x1611395215c0ede475af6fd3b647c674d18735851060ccad0e0e7a7c150831c9","raw":"0xf8708302a11e850ba43b740083015f909436fab08874deb6cd0e7f916ddee8957630073d47880eb1fbb47be3f800801ca01611395215c0ede475af6fd3b647c674d18735851060ccad0e0e7a7c150831c9a0333716a13f040cbd8ac43462b9cfa8d602d4a3413825d283705bc3d4b22af8de","s":"0x333716a13f040cbd8ac43462b9cfa8d602d4a3413825d283705bc3d4b22af8de","standardV":"0x1","to":"0x36fab08874deb6cd0e7f916ddee8957630073d47","transactionIndex":"0xb","v":"0x1c","value":"0xeb1fbb47be3f800"}],"transactionsRoot":"0x6414d72a4c223bce7d1309869332b148670eb66af4e3b3ba6d1a55aa0bb3fd4f","uncles":[]}} \ No newline at end of file diff --git a/statediff/indexer/ipld/test_data/eth-block-body-json-999999 b/statediff/indexer/ipld/test_data/eth-block-body-json-999999 deleted file mode 100644 index de007b641..000000000 --- a/statediff/indexer/ipld/test_data/eth-block-body-json-999999 +++ /dev/null @@ -1 +0,0 @@ -{"jsonrpc":"2.0","result":{"author":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","difficulty":"0xb6b4beb1e8e","extraData":"0xd783010303844765746887676f312e342e32856c696e7578","gasLimit":"0x2fefd8","gasUsed":"0x38658","hash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","miner":"0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5","mixHash":"0x5b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0","nonce":"0xf491f46b60fe04b3","number":"0xf423f","parentHash":"0xd33c9dde9fff0ebaa6e71e8b26d2bda15ccf111c7af1b633698ac847667f0fb4","receiptsRoot":"0x7fa0f6ca2a01823208d80801edad37e3e3a003b55c89319b45eb1f97862ad229","sealFields":["0xa05b10f4a08a6c209d426f6158bd24b574f4f7b7aa0099c67c14a1f693b4dd04d0","0x88f491f46b60fe04b3"],"sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347","size":"0x6e8","stateRoot":"0xed98aa4b5b19c82fb35364f08508ae0a6dec665fa57663dca94c5d70554cde10","timestamp":"0x56bfb405","totalDifficulty":"0x6305496c80ab5c3f","transactions":[{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0xc3665b8a9224ba8da9a20322f31d599cafa52c5c","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x22879e0bc9602fef59dc0602f9bc385f12632da5cb4eee4b813a0c27159c4d24","input":"0x","networkId":null,"nonce":"0x1d3","publicKey":"0xc3dbee74f1b2b8dbedc417244b7f5a134c6f7769faf9ffe784b3f0fdda7ca52cf914d3f2b3164c009bf939796b77f047ccb4cc113d3bde5b06555b781e0c7149","r":"0x43531017f1569ec692c0bf1ad710ddb5158b60505ea33fb7a21245738539e2d5","raw":"0xf86e8201d3850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d8888102363ac310a4000801ca043531017f1569ec692c0bf1ad710ddb5158b60505ea33fb7a21245738539e2d5a03856c6a1117ff71e9b769ccb6960674038a3326c3dd84c152fc83ada28145a07","s":"0x3856c6a1117ff71e9b769ccb6960674038a3326c3dd84c152fc83ada28145a07","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x0","v":"0x1c","value":"0x102363ac310a4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x4ce758b0c8aa655b77c14f16bd0190b5715be75a","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x3c634bf5f09f6b5b5ea377df7abb483f422ae5d4ba389c395f14f833de25d362","input":"0x","networkId":null,"nonce":"0x9","publicKey":"0x75022ee25c702fc6a53853843e00e87877e737f9c631a9d831c11693d7e31877a1b09755ab3a5c112decf57339839364b8b9a3c23ada01761b1e3a044e297316","r":"0x8219a4f30cb8dd7d5e1163ac433f207b599d804b0d74ee54c8694014db647700","raw":"0xf86c09850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880ed350879ce50000801ba08219a4f30cb8dd7d5e1163ac433f207b599d804b0d74ee54c8694014db647700a03db2e806986a746d44d675fdbbd7594bb2856946ba257209abfffdd1628141af","s":"0x3db2e806986a746d44d675fdbbd7594bb2856946ba257209abfffdd1628141af","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x1","v":"0x1b","value":"0xed350879ce50000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x30906581413d556de1a018adbe6cc63c88d58512","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x59feccaad599e776cd6635e68b5e19254cca3b38e49437044f1e1d15d00b0576","input":"0x","networkId":null,"nonce":"0x59","publicKey":"0xccf6be26c1eb1c89d5fe958db0112a46e3ac23a95ac0f709ce84a49ae3f20bcf143909bfe67f685caaf362066e1c7e224899f57678bbcecb7a720175bcbb387d","r":"0x1ca26859a6eed116312010359c2e8351d126f31b078a0e2e19aae0acc98d9488","raw":"0xf86c59850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88882b0ca8b9f5f02000801ba01ca26859a6eed116312010359c2e8351d126f31b078a0e2e19aae0acc98d9488a0172c1a299737440a9063af6547d567ca7d269bfc2a9e81ec1de21aa8bd8e17b1","s":"0x172c1a299737440a9063af6547d567ca7d269bfc2a9e81ec1de21aa8bd8e17b1","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x2","v":"0x1b","value":"0x2b0ca8b9f5f02000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x8bec4e6fb1a28820eb1e8ec2d4eae4842ed2f923","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x98a03afa804e248ada5f26e9118ae927d4d3cb60e78c54938dced1cf25ee3567","input":"0x","networkId":null,"nonce":"0x2","publicKey":"0xbc8c89a85804c7859069c13561dbbd8d1d4739ec7d18514c42b3ffea64529cee522a5e20d93373d0074e94c4c7b6eba51c7d2f18ef7c64c37520342acb233795","r":"0xa5aca100a264a8da4a58bef77c5116a6dde42186ac249623c0edcb30189640a","raw":"0xf86c02850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880fd037ba87693800801ba00a5aca100a264a8da4a58bef77c5116a6dde42186ac249623c0edcb30189640aa0783e9439755023b919897574f94337aaac4a1ddc20217e3ac264a7edf813ffdd","s":"0x783e9439755023b919897574f94337aaac4a1ddc20217e3ac264a7edf813ffdd","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x3","v":"0x1b","value":"0xfd037ba87693800"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x4835a9626b02369546502d2949e16b0fda110b0c","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x18f1e6430334ad548bc36fc317016bc9f7a076d1fa50a89fe4e1d095ed3f9562","input":"0x","networkId":null,"nonce":"0xd9","publicKey":"0x91b3b4fe89d112cfc7308619e8aa7de86f14af3f6b6e4e92becb6e29e98207835bbe1a69109c16b14b0eb7285d2b952a9cde6007932afe95e81eefc183f75314","r":"0xb93c6f8dce800a1ec57d70813c4d35e3ffe25a6f1ae9057cf706636cf34d662","raw":"0xf86d81d9850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d888814bac05c835a5400801ba00b93c6f8dce800a1ec57d70813c4d35e3ffe25a6f1ae9057cf706636cf34d662a06d254a5557b7716ef01dd28aa84cc919f397c0a778f3a109a1ee9df2fc530ec0","s":"0x6d254a5557b7716ef01dd28aa84cc919f397c0a778f3a109a1ee9df2fc530ec0","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x4","v":"0x1b","value":"0x14bac05c835a5400"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x9cc72ebf3daaf12c72e48605e1e67b47c95a1911","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0xb1cada8daf63c45750df1ee79eed5a3cf6240e3cebdb6de3f26bc7cf03217bf4","input":"0x","networkId":null,"nonce":"0x34","publicKey":"0x90dff18c1c01d566e6d8bf0190e3e965f98e7f51ccbbe6040f9a9972e88f4ad19f1547406454fbc9e1ebcf4c5f2f1e2df9b9371028fe0a552ecca5f5f0aa4129","r":"0xe9a25c929c26d1a95232ba75aef419a91b470651eb77614695e16c5ba023e383","raw":"0xf86c34850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f258512af0d4000801ba0e9a25c929c26d1a95232ba75aef419a91b470651eb77614695e16c5ba023e383a0679fb2fc0d0b0f3549967c0894ee7d947f07d238a83ef745bc3ced5143a4af36","s":"0x679fb2fc0d0b0f3549967c0894ee7d947f07d238a83ef745bc3ced5143a4af36","standardV":"0x0","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x5","v":"0x1b","value":"0xf258512af0d4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x5c51467399bc655f0cc6db88df15946717534633","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x4fa879b491e0779fc035758ec77b93c4e51d528d65b64eb055c015a58deff103","input":"0x","networkId":null,"nonce":"0x6f","publicKey":"0x0b7e2532afc2daa33763002525aa6c7edc25ea97d63baeeb2c6f5094f18dca4a0212b52061f9a9091aad5c4380a6506f9a51ddd2d014e78742bf144a58d6ffa0","r":"0x9e0b8360a36d6d0320aef19bd811431b1a692504549da9f05f9b4d9e329993b9","raw":"0xf86c6f850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88881c54e302456eb400801ca09e0b8360a36d6d0320aef19bd811431b1a692504549da9f05f9b4d9e329993b9a05acff70bd8cf82d9d70b11d4e59dc5d54937475ec394ec846263495f61e5e6ee","s":"0x5acff70bd8cf82d9d70b11d4e59dc5d54937475ec394ec846263495f61e5e6ee","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x6","v":"0x1c","value":"0x1c54e302456eb400"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x055d9d7ec193d1e062c6ec4fa80ef89b5c1258f4","gas":"0x5208","gasPrice":"0xdf8475800","hash":"0x1bea59827ab153b20cee79890d221a80fa6a04e552d667504c592ed314fb6d76","input":"0x","networkId":null,"nonce":"0x46","publicKey":"0xfae19a0ac08d36f0229663d45d0c41ca52c4e295c7af82a1b39515a79025175293400d026e0d41767aac42f8b7e4a6687c5762161457d753f1fc0766614868f9","r":"0xb2803f1bfa237bda762d214f71a4c71a7306f55df2880c77d746024e81ccbaa2","raw":"0xf86c46850df84758008252089432be343b94f860124dc4fee278fdcbd38c102d88880f0447b1edca4000801ca0b2803f1bfa237bda762d214f71a4c71a7306f55df2880c77d746024e81ccbaa2a07aeed35c0cbfbe0ed6552fd55b3f57fdc054eeabd02fc61bf66d9a8843aa593a","s":"0x7aeed35c0cbfbe0ed6552fd55b3f57fdc054eeabd02fc61bf66d9a8843aa593a","standardV":"0x1","to":"0x32be343b94f860124dc4fee278fdcbd38c102d88","transactionIndex":"0x7","v":"0x1c","value":"0xf0447b1edca4000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x8e68c0c9b5275fa684291304af9cafe6ceaf2772","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x73e87db1108a2aa852f48e088ca1a2771f9b7c18af8d1bd77a3cdcc72a750c56","input":"0x","networkId":null,"nonce":"0x3","publicKey":"0xa5e423dfcbdbba1fdbb785367a88235fa2569061d72b6c715111ac21cbef8fc1db860acdef85f1408c760f34b28a4f07d950ac15c4b85d5e528e50f546a89b6d","r":"0x6dccb1349919662c40455aee04472ae307195580837510ecf2e6fc428876eb03","raw":"0xf86d03850ba43b740083015f909426016a2b5d872adc1b131a4cd9d4b18789d0d9eb88016345785d8a0000801ba06dccb1349919662c40455aee04472ae307195580837510ecf2e6fc428876eb03a03b84ea9c3c6462ac086a1d789a167c2735896a6b5a40e85a6e45da8884fe27de","s":"0x3b84ea9c3c6462ac086a1d789a167c2735896a6b5a40e85a6e45da8884fe27de","standardV":"0x0","to":"0x26016a2b5d872adc1b131a4cd9d4b18789d0d9eb","transactionIndex":"0x8","v":"0x1b","value":"0x16345785d8a0000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0x337a5e90b73f44ffebea73cb3d97738c524f63e1032b30735e43212cff731aee","input":"0x","networkId":null,"nonce":"0x2a11f","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0xaa8909295ff178639df961126970f44b5d894326eb47cead161f6910799a98b8","raw":"0xf8708302a11f850ba43b740083015f90945275c3371ece4d4a5b1e14cf6dbfc2277d58ef92880e93ea6a35f2e000801ba0aa8909295ff178639df961126970f44b5d894326eb47cead161f6910799a98b8a0254d7742eccaf2f4c44bfe638378dcf42bdde9465f231b89003cc7927de5d46e","s":"0x254d7742eccaf2f4c44bfe638378dcf42bdde9465f231b89003cc7927de5d46e","standardV":"0x0","to":"0x5275c3371ece4d4a5b1e14cf6dbfc2277d58ef92","transactionIndex":"0x9","v":"0x1b","value":"0xe93ea6a35f2e000"},{"blockHash":"0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38","blockNumber":"0xf423f","condition":null,"creates":null,"from":"0x2a65aca4d5fc5b5c859090a6c34d164135398226","gas":"0x15f90","gasPrice":"0xba43b7400","hash":"0xc280ab030e20bc9ef72c87b420d58f598bda753ef80a53136a923848b0c89a5c","input":"0x","networkId":null,"nonce":"0x2a120","publicKey":"0x4c3eb5e19c71d8245eaaaba21ef8f94a70e9250848d10ade086f893a7a33a06d7063590e9e6ca88f918d7704840d903298fe802b6047fa7f6d09603eba690c39","r":"0xcfe3ad31d6612f8d787c45f115cc5b43fb22bcc210b62ae71dc7cbf0a6bea8df","raw":"0xf8708302a120850ba43b740083015f90941c51bf013add0857c5d9cf2f71a7f15ca93d4816880e917c4b10c87400801ca0cfe3ad31d6612f8d787c45f115cc5b43fb22bcc210b62ae71dc7cbf0a6bea8dfa057db8998114fae3c337e99dbd8573d4085691880f4576c6c1f6c5bbfe67d6cf0","s":"0x57db8998114fae3c337e99dbd8573d4085691880f4576c6c1f6c5bbfe67d6cf0","standardV":"0x1","to":"0x1c51bf013add0857c5d9cf2f71a7f15ca93d4816","transactionIndex":"0xa","v":"0x1c","value":"0xe917c4b10c87400"}],"transactionsRoot":"0x447cbd8c48f498a6912b10831cdff59c7fbfcbbe735ca92883d4fa06dcd7ae54","uncles":[]},"id":1} diff --git a/statediff/indexer/ipld/test_data/eth-block-body-rlp-997522 b/statediff/indexer/ipld/test_data/eth-block-body-rlp-997522 deleted file mode 100644 index ca176613e46a0b03ceaf15c4c5012d079726c562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmey#w)ZEK_=2u$S5H5GQ~I{>s;KSNe*G)L8*41PE-k-lFeUO_hhNU@1ss*u$+p~z zI~xS*?TpHgW!meTTRu2ew#ef2Bi~ui9tBPD-kC7*-P{Jf3zkPNF8!vMKjDWo;{w5_ zuRP!EdlWUhU#(=)(o56UaGp=B++uy$L`9cXdrf5Wf~rkAf4<$071LPL(WClokLT(| zzg8*mpJ@2O@bR`>_vJGS!d}RWOP>i{_P^Qn*`xzM@}fN+NYBh!dw?-Xf9vDqEs8rC z8Adv2<9ej6DEzjW-(pg;{`(tEK^!e%`vs29xZcdj!qDQLT9VP8o^PmUs%O}mlbKgq zu|PF-ruLHC*H>F_=#^dU5V%fu!tvS1%oj;5`YNB?us=SlUV`4@+G7ZuT$|l=QENl$<*t_ZF z~O?}9Ar2EYA2dODlUl&eMP~Gf)_TCMz-=qnxjaM^}+R7KvwfcEfgZCk}{^l8c?~g5zJ>&c0 z-tpL~)va68x1G5nby>(&dP-M`@P~y?e;uw&cAt__8RNBJZoc2;r}ysuIJDNla~b2U z1wRd@Ofu41?V@7eW1+%Pvbpxc(d1nx;-wlh9oL+6-6Tser4dvxniLt@xE{Cfopc76 z6#GF*u>q72r{hkDy8f5`VoIEF4)?7Zq~lLnap%Ct*^J2b869= z3VT<|9D{Gp^F?=4@5rqNv)3Cl+~%ZRPabQ`zz+rbOB5kkF1_^t0P73as{LZ@{2 MWXe8D+O+v50A5(%GXMYp diff --git a/statediff/indexer/ipld/test_data/eth-block-body-rlp-999999 b/statediff/indexer/ipld/test_data/eth-block-body-rlp-999999 deleted file mode 100644 index 3719c36d3ca61c6709df9dc288efe2268d9f37ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1768 zcmd_p`#aMM00!{Q9OgEgTWxb$$Dx|ChiDRU%q+$!qPgEDnl^FT*eT29YuR*pik%a= z^qnLm9-`vJJSv2zxnBx(+M^Vf%gS`nIr{1R<_|dUKk)hCecx5J=~b2O;Gk3S)Xi^* z=JNNZ7cB=`#Gz7@@!7=(`xrT0l-M-g2GFF}XJ)E1?Cf2BW88z@Ao17i z)?J74C?dbd?!!btLyngi9*`tWVR`3djo^HK6*UCiMYw+~W`Pf{(PYiVM%+%OPgHt` zB?fp;Awl=lmP>~f`Q_KFkbv>)&qZmHp4Ky=mAinUuWA#cHU3~4_@x^U&9sG&!J+f_ zh%y-nYYY|I6q0Anu3x|p>~4ZW{_nYmd|7)aJXOyQUT^Lam8+@qXJugYGf-`9#%mLI#Lb9U-B9zRr>^r zYl>5m8>;tLRXdaknb1MLj*=1x$@GJZY+LOPijzvc3*YG77b0%*w6)jh`)hU@OTWGp{#O7>O+<^txPj`{JjRXQ+7Al-u_B zcF$-h#Ke85Fh&#P9ughk95ru33pwmn60xe<%VYw#g%$<3q{XwuK#o}+-1X}e6i*#O_~_HUuriJ4YDk}0%#AD5*ADbaw@!^ zqnEF@-Qg~aHN^7brL|*-HYL+;3r*L8uUD({?@X}Zhtkm8BFp|tKig(bjRIYXrKtJN zrbK!C{ueU@G?xKj+|Bwm9W7mZ&p%S(A~{c#ras_MacG77*lFIER93rR$vnMZ5jFizu4H;_q3Nnp>gKz@U!XqS1^dJB}okbz;t_eGXd^ zXs3*NsQi-A+gu8sl@Eq$OIi^l0fgZY7utH8zx-|=p#%Gcbwfa^3UXAkV0^8zgKP)@ zjkqeZgvMKiW#cEX`WWx=p}K5g-}tNmN+)x}a=w3n)mvv*fR5ecN)DE*Qt&c$bU-@5 zLC!6`TXPd6&%(fiSs#m>Vxp_z@h03GMyWgPh4H6?U1x$5$S(z18#||ziGYgO>_4I( z=LymDg^yQ=sezOwY2V2U{FEy|Uc4Hm$4FFA!-OQuS;~uh zMrI7;Z#VKEffha~ZgbsBil@{KI>4P!SWSNLh%mBY?;`F$qOq?8>Np9f zJsX!2lI|>qRyrRx5+JUnQjuNk%>t#edp09cgv;Di@}gmH2(=ybXRb(H7IKxI(p4h-VWHDshbxoar~KH`e0$O1?c!OsOFh>*F6rJZB#^nF`G6Q> zHiuV2$t$C}dH2jy8K*^cNr=cxZ(jF(`EjHDZx$>%nb4an(7dgjQQc_2$XsQ8rpvl+ zA<7%iY%|ET*mWgv!SQnv^Y>)*Ux{vU>R57(F=rWrZu!Pv^Gd|UlGHeUPZrwA$S~4D z8+ZOx%exiL{7yE_`tNTvEfHu5+rRn1teee@%uFrrsU;ch>G_6wCVEEg<(YXY`Q^n6 wHh0`J{Iqo5iBspzEYbv|GFd`meg7}LHr3pzj`!Q=Rr(!auD`wn=%m~P0D29FEC2ui diff --git a/statediff/indexer/ipld/test_data/eth-block-header-rlp-999997 b/statediff/indexer/ipld/test_data/eth-block-header-rlp-999997 deleted file mode 100644 index 3d3cf65afe5412dd633622fc2ff1424362faad06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmey#B(b17)pWt*$8PW1A4s}{-Ha@p(QDb5Jo`Iae1fjv_O-8eE|5Lr`{Lg5*s9g7 zThq6lxgvF0$W?kuSBdb4g-(ARu1t2H612zVs(CZ#JFWeqmir6uN!M0C-nt;=rqBb6 z&R6ascLgl>S}dGaZXC7dvgIrrE2|Pi*N&?#3v_hU9wyCpmb&_j*>=L0H!<3gSIo~# znQ$mh{rbIdb8+l~)`M}2(%&vfdg9L29-seMIJP(WYvL2muLp{CLM;!+O7CQ380nym zJ5Sx+Y;QBalWnv9`y0(nk33q!_HVv6<9ahAGjof3YDq?WdcL8aiJnnwPG(+d#e%n& u8+L4CaGTS4J^A-`8@Ve&jVXtAoH-(Q-PTU*$E6kbI;v+e+Sx7(It2i#k%%h* diff --git a/statediff/indexer/ipld/test_data/eth-block-header-rlp-999999 b/statediff/indexer/ipld/test_data/eth-block-header-rlp-999999 deleted file mode 100644 index 6b79b705624905bda92b127e7afe6b319c841be8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmey#B(dPK&D?wQ|MTry_FS%8?b6tGlWr6G&-xv3e$5yRw z-I~7b%oVB2Lax$Nx=MsUEOh$oaAmUll%PE>SIwI_-)Zd^wcKBLPrA1H@zw=zXRPv$ zmOP=qIXLA*E5|yn+&5|QOUsh)tn`U32=%!qu)w8eZ;!{98OtVW3pC5z|2n6B|LJ|j zF)KBiul!=WbA4UNg8BvDPH8bV8FAd;V0^pQ{PE)j%v)nR4QIQ)mY?3HbxCt4Bg04s zZQR-3ujTrh`JL>W_21uUW^RjU3ERJgb;k8(MrP&~_tcV%_Vj#1Jrg~n)||||(uxJq v0$&z%LY=pPpw%vGlUgGJ_&!1!)kNZ=cpY^}fnVlTDhW3(Zl#nMIrhW8^pl74-% X+{XjJ~9y(nbM>_ai)#etojs W#{N7^8RR_+e8E3|qp-aG z$l=^GKA=k37!h2RAf#7WM|B--s(ZHFu2ZmqZq%jz4Hq-uy1AgD4o!dph?a1V{tQ6o z&41;!ul3vzExbTnwIEMxE<(GY*R{QfNUSbQcvKG|coOF3%%fK9@e3{Y?Fb2sux1bw zpcc`n6}uYP|9Aw%Uz&TM4e;{|WcLBBL`|AJL_zD43xJ^hf%;bu(Uav8Jwh?Ag`yROC4Y31Oqmp9S8@Zd5AJgDkl412tlsS?ZG=6n}dXR{G=-=5^K*E7G}Q5-{{y1q7_YZ3`B zNf;X7Ordl8XwjubZy3@Kqb#~}l|WLxphrH>iheezDd$i*qp(%w8-p^-@G~TGt&A)ve3G<7|Cro)b4KQ;nH==GKnk{zBO5`%L7z}1G-`QV^VM9S>{MahXDboQbZ zXElg!?e_7fGh&XsfG)?Kghoi9rStOlR3S*obC-OI9u-VO0RG7@bzgW!@wYV7s~wQ% zpy(ro4^Y2yx~`oUGoxxmO151JZ>qXLPX&X{45ZrGEui>|JIj-ZlLvi)g>SwV_b`fzA{0 diff --git a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-000dd0 b/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-000dd0 deleted file mode 100644 index 2fbe90bd675650b967d5ab654454d827235560fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83 zcmewn*Z>3zsH$nd}lg jJwogdTiMw)3m9(Rs@>i{rS8?LSHZWX>?D3VgA@S(z^*A@ diff --git a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-113049 b/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-113049 deleted file mode 100644 index e7407c417..000000000 --- a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-113049 +++ /dev/null @@ -1 +0,0 @@ -JN>b$kg$2͠| d \ No newline at end of file diff --git a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-9d1860 b/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-9d1860 deleted file mode 100644 index d39f6324f..000000000 --- a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-9d1860 +++ /dev/null @@ -1 +0,0 @@ -˚?L=d@Ki+ee&R-Er?*Mv(}280@aKj@gEiirhmG4lknQvd++ C9u!Xi diff --git a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-ffc25c b/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-ffc25c deleted file mode 100644 index 3044ec772..000000000 --- a/statediff/indexer/ipld/test_data/eth-storage-trie-rlp-ffc25c +++ /dev/null @@ -1 +0,0 @@ -Q.ӽbRf-ot6KꀀǿU>z@Ao z*sRq0)%LqT-nQpizDUw49#b{g!LNKVhrL zu$ruM5tlsQcS*c^_ajpA$4`lu;WM8&K7ZtFps|w?i@jtEaX@q`U>Lvz6oH6Bl|WPo zpeO_>f&x?tm?%yfq7y?CNI(InCYS^hW841&Kn`QG(B9=Oi7I=tb|l_tX5?aONlz`w z=t$2u)H5{IGi}Yu%qy*cYT}LEVo;pCpY!4Ny%VChuH&23dG(V2y4>Bt?fu1ZQ}q)~ uJC9zHj0^MI(|zv1!LEdtT$@YVPrqYG7oE55j7z~JZpH;rgK$zEFc|=G=#An4 diff --git a/statediff/indexer/ipld/trie_node.go b/statediff/indexer/ipld/trie_node.go deleted file mode 100644 index 715e00f66..000000000 --- a/statediff/indexer/ipld/trie_node.go +++ /dev/null @@ -1,457 +0,0 @@ -// VulcanizeDB -// Copyright © 2019 Vulcanize - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. - -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -package ipld - -import ( - "encoding/json" - "fmt" - - "github.com/ipfs/go-cid" - node "github.com/ipfs/go-ipld-format" - - "github.com/ethereum/go-ethereum/rlp" -) - -const ( - extension = "extension" - leaf = "leaf" - branch = "branch" -) - -// TrieNode is the general abstraction for -//ethereum IPLD trie nodes. -type TrieNode struct { - // leaf, extension or branch - nodeKind string - - // If leaf or extension: [0] is key, [1] is val. - // If branch: [0] - [16] are children. - elements []interface{} - - // IPLD block information - cid cid.Cid - rawdata []byte -} - -/* - OUTPUT -*/ - -type trieNodeLeafDecoder func([]interface{}) ([]interface{}, error) - -// decodeTrieNode returns a TrieNode object from an IPLD block's -// cid and rawdata. -func decodeTrieNode(c cid.Cid, b []byte, - leafDecoder trieNodeLeafDecoder) (*TrieNode, error) { - var ( - i, decoded, elements []interface{} - nodeKind string - err error - ) - - if err = rlp.DecodeBytes(b, &i); err != nil { - return nil, err - } - - codec := c.Type() - switch len(i) { - case 2: - nodeKind, decoded, err = decodeCompactKey(i) - if err != nil { - return nil, err - } - - if nodeKind == extension { - elements, err = parseTrieNodeExtension(decoded, codec) - if err != nil { - return nil, err - } - } - if nodeKind == leaf { - elements, err = leafDecoder(decoded) - if err != nil { - return nil, err - } - } - if nodeKind != extension && nodeKind != leaf { - return nil, fmt.Errorf("unexpected nodeKind returned from decoder") - } - case 17: - nodeKind = branch - elements, err = parseTrieNodeBranch(i, codec) - if err != nil { - return nil, err - } - default: - return nil, fmt.Errorf("unknown trie node type") - } - - return &TrieNode{ - nodeKind: nodeKind, - elements: elements, - rawdata: b, - cid: c, - }, nil -} - -// decodeCompactKey takes a compact key, and returns its nodeKind and value. -func decodeCompactKey(i []interface{}) (string, []interface{}, error) { - first := i[0].([]byte) - last := i[1].([]byte) - - switch first[0] / 16 { - case '\x00': - return extension, []interface{}{ - nibbleToByte(first)[2:], - last, - }, nil - case '\x01': - return extension, []interface{}{ - nibbleToByte(first)[1:], - last, - }, nil - case '\x02': - return leaf, []interface{}{ - nibbleToByte(first)[2:], - last, - }, nil - case '\x03': - return leaf, []interface{}{ - nibbleToByte(first)[1:], - last, - }, nil - default: - return "", nil, fmt.Errorf("unknown hex prefix") - } -} - -// parseTrieNodeExtension helper improves readability -func parseTrieNodeExtension(i []interface{}, codec uint64) ([]interface{}, error) { - return []interface{}{ - i[0].([]byte), - Keccak256ToCid(codec, i[1].([]byte)), - }, nil -} - -// parseTrieNodeBranch helper improves readability -func parseTrieNodeBranch(i []interface{}, codec uint64) ([]interface{}, error) { - var out []interface{} - - for i, vi := range i { - v, ok := vi.([]byte) - // Sometimes this throws "panic: interface conversion: interface {} is []interface {}, not []uint8" - // Figure out why, and if it is okay to continue - if !ok { - return nil, fmt.Errorf("unable to decode branch node entry into []byte at position: %d value: %+v", i, vi) - } - - switch len(v) { - case 0: - out = append(out, nil) - case 32: - out = append(out, Keccak256ToCid(codec, v)) - default: - return nil, fmt.Errorf("unrecognized object: %v", v) - } - } - - return out, nil -} - -/* - Node INTERFACE -*/ - -// Resolve resolves a path through this node, stopping at any link boundary -// and returning the object found as well as the remaining path to traverse -func (t *TrieNode) Resolve(p []string) (interface{}, []string, error) { - switch t.nodeKind { - case extension: - return t.resolveTrieNodeExtension(p) - case leaf: - return t.resolveTrieNodeLeaf(p) - case branch: - return t.resolveTrieNodeBranch(p) - default: - return nil, nil, fmt.Errorf("nodeKind case not implemented") - } -} - -// Tree lists all paths within the object under 'path', and up to the given depth. -// To list the entire object (similar to `find .`) pass "" and -1 -func (t *TrieNode) Tree(p string, depth int) []string { - if p != "" || depth == 0 { - return nil - } - - var out []string - - switch t.nodeKind { - case extension: - var val string - for _, e := range t.elements[0].([]byte) { - val += fmt.Sprintf("%x", e) - } - return []string{val} - case branch: - for i, elem := range t.elements { - if _, ok := elem.(cid.Cid); ok { - out = append(out, fmt.Sprintf("%x", i)) - } - } - return out - - default: - return nil - } -} - -// ResolveLink is a helper function that calls resolve and asserts the -// output is a link -func (t *TrieNode) ResolveLink(p []string) (*node.Link, []string, error) { - obj, rest, err := t.Resolve(p) - if err != nil { - return nil, nil, err - } - - lnk, ok := obj.(*node.Link) - if !ok { - return nil, nil, fmt.Errorf("was not a link") - } - - return lnk, rest, nil -} - -// Copy will go away. It is here to comply with the interface. -func (t *TrieNode) Copy() node.Node { - panic("implement me") -} - -// Links is a helper function that returns all links within this object -func (t *TrieNode) Links() []*node.Link { - var out []*node.Link - - for _, i := range t.elements { - c, ok := i.(cid.Cid) - if ok { - out = append(out, &node.Link{Cid: c}) - } - } - - return out -} - -// Stat will go away. It is here to comply with the interface. -func (t *TrieNode) Stat() (*node.NodeStat, error) { - return &node.NodeStat{}, nil -} - -// Size will go away. It is here to comply with the interface. -func (t *TrieNode) Size() (uint64, error) { - return 0, nil -} - -/* - TrieNode functions -*/ - -// MarshalJSON processes the transaction trie into readable JSON format. -func (t *TrieNode) MarshalJSON() ([]byte, error) { - var out map[string]interface{} - - switch t.nodeKind { - case extension: - fallthrough - case leaf: - var hexPrefix string - for _, e := range t.elements[0].([]byte) { - hexPrefix += fmt.Sprintf("%x", e) - } - - // if we got a byte we need to do this casting otherwise - // it will be marshaled to a base64 encoded value - if _, ok := t.elements[1].([]byte); ok { - var hexVal string - for _, e := range t.elements[1].([]byte) { - hexVal += fmt.Sprintf("%x", e) - } - - t.elements[1] = hexVal - } - - out = map[string]interface{}{ - "type": t.nodeKind, - hexPrefix: t.elements[1], - } - - case branch: - out = map[string]interface{}{ - "type": branch, - "0": t.elements[0], - "1": t.elements[1], - "2": t.elements[2], - "3": t.elements[3], - "4": t.elements[4], - "5": t.elements[5], - "6": t.elements[6], - "7": t.elements[7], - "8": t.elements[8], - "9": t.elements[9], - "a": t.elements[10], - "b": t.elements[11], - "c": t.elements[12], - "d": t.elements[13], - "e": t.elements[14], - "f": t.elements[15], - } - default: - return nil, fmt.Errorf("nodeKind %s not supported", t.nodeKind) - } - - return json.Marshal(out) -} - -// nibbleToByte expands the nibbles of a byte slice into their own bytes. -func nibbleToByte(k []byte) []byte { - var out []byte - - for _, b := range k { - out = append(out, b/16) - out = append(out, b%16) - } - - return out -} - -// Resolve reading conveniences -func (t *TrieNode) resolveTrieNodeExtension(p []string) (interface{}, []string, error) { - nibbles := t.elements[0].([]byte) - idx, rest := shiftFromPath(p, len(nibbles)) - if len(idx) < len(nibbles) { - return nil, nil, fmt.Errorf("not enough nibbles to traverse this extension") - } - - for _, i := range idx { - if getHexIndex(string(i)) == -1 { - return nil, nil, fmt.Errorf("invalid path element") - } - } - - for i, n := range nibbles { - if string(idx[i]) != fmt.Sprintf("%x", n) { - return nil, nil, fmt.Errorf("no such link in this extension") - } - } - - return &node.Link{Cid: t.elements[1].(cid.Cid)}, rest, nil -} - -func (t *TrieNode) resolveTrieNodeLeaf(p []string) (interface{}, []string, error) { - nibbles := t.elements[0].([]byte) - - if len(nibbles) != 0 { - idx, rest := shiftFromPath(p, len(nibbles)) - if len(idx) < len(nibbles) { - return nil, nil, fmt.Errorf("not enough nibbles to traverse this leaf") - } - - for _, i := range idx { - if getHexIndex(string(i)) == -1 { - return nil, nil, fmt.Errorf("invalid path element") - } - } - - for i, n := range nibbles { - if string(idx[i]) != fmt.Sprintf("%x", n) { - return nil, nil, fmt.Errorf("no such link in this extension") - } - } - - p = rest - } - - link, ok := t.elements[1].(node.Node) - if !ok { - return nil, nil, fmt.Errorf("leaf children is not an IPLD node") - } - - return link.Resolve(p) -} - -func (t *TrieNode) resolveTrieNodeBranch(p []string) (interface{}, []string, error) { - idx, rest := shiftFromPath(p, 1) - hidx := getHexIndex(idx) - if hidx == -1 { - return nil, nil, fmt.Errorf("incorrect path") - } - - child := t.elements[hidx] - if child != nil { - return &node.Link{Cid: child.(cid.Cid)}, rest, nil - } - return nil, nil, fmt.Errorf("no such link in this branch") -} - -// shiftFromPath extracts from a given path (as a slice of strings) -// the given number of elements as a single string, returning whatever -// it has not taken. -// -// Examples: -// ["0", "a", "something"] and 1 -> "0" and ["a", "something"] -// ["ab", "c", "d", "1"] and 2 -> "ab" and ["c", "d", "1"] -// ["abc", "d", "1"] and 2 -> "ab" and ["c", "d", "1"] -func shiftFromPath(p []string, i int) (string, []string) { - var ( - out string - rest []string - ) - - for _, pe := range p { - re := "" - for _, c := range pe { - if len(out) < i { - out += string(c) - } else { - re += string(c) - } - } - - if len(out) == i && re != "" { - rest = append(rest, re) - } - } - - return out, rest -} - -// getHexIndex returns to you the integer 0 - 15 equivalent to your -// string character if applicable, or -1 otherwise. -func getHexIndex(s string) int { - if len(s) != 1 { - return -1 - } - - c := s[0] - switch { - case '0' <= c && c <= '9': - return int(c - '0') - case 'a' <= c && c <= 'f': - return int(c - 'a' + 10) - } - - return -1 -}