Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
555b3652
Commit
555b3652
authored
Feb 12, 2019
by
Dan Kinsley
Committed by
Guillaume Ballet
Feb 12, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
accounts/abi/bind/backends: add TransactionByHash to SimulatedBackend (#19026)
parent
3d22a46c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
0 deletions
+85
-0
simulated.go
accounts/abi/bind/backends/simulated.go
+19
-0
simulated_test.go
accounts/abi/bind/backends/simulated_test.go
+66
-0
No files found.
accounts/abi/bind/backends/simulated.go
View file @
555b3652
...
...
@@ -164,6 +164,25 @@ func (b *SimulatedBackend) TransactionReceipt(ctx context.Context, txHash common
return
receipt
,
nil
}
// TransactionByHash checks the pool of pending transactions in addition to the
// blockchain. The isPending return value indicates whether the transaction has been
// mined yet. Note that the transaction may not be part of the canonical chain even if
// it's not pending.
func
(
b
*
SimulatedBackend
)
TransactionByHash
(
ctx
context
.
Context
,
txHash
common
.
Hash
)
(
tx
*
types
.
Transaction
,
isPending
bool
,
err
error
)
{
tx
=
b
.
pendingBlock
.
Transaction
(
txHash
)
if
tx
!=
nil
{
return
tx
,
true
,
nil
}
tx
,
_
,
_
,
_
=
rawdb
.
ReadTransaction
(
b
.
database
,
txHash
)
if
tx
!=
nil
{
return
tx
,
false
,
nil
}
return
nil
,
false
,
ethereum
.
NotFound
}
// PendingCodeAt returns the code associated with an account in the pending state.
func
(
b
*
SimulatedBackend
)
PendingCodeAt
(
ctx
context
.
Context
,
contract
common
.
Address
)
([]
byte
,
error
)
{
b
.
mu
.
Lock
()
...
...
accounts/abi/bind/backends/simulated_test.go
0 → 100644
View file @
555b3652
package
backends_test
import
(
"context"
"math/big"
"testing"
ethereum
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
)
func
TestSimulatedBackend
(
t
*
testing
.
T
)
{
var
gasLimit
uint64
=
8000029
key
,
_
:=
crypto
.
GenerateKey
()
// nolint: gosec
auth
:=
bind
.
NewKeyedTransactor
(
key
)
genAlloc
:=
make
(
core
.
GenesisAlloc
)
genAlloc
[
auth
.
From
]
=
core
.
GenesisAccount
{
Balance
:
big
.
NewInt
(
9223372036854775807
)}
sim
:=
backends
.
NewSimulatedBackend
(
genAlloc
,
gasLimit
)
// should return an error if the tx is not found
txHash
:=
common
.
HexToHash
(
"2"
)
_
,
isPending
,
err
:=
sim
.
TransactionByHash
(
context
.
Background
(),
txHash
)
if
isPending
{
t
.
Fatal
(
"transaction should not be pending"
)
}
if
err
!=
ethereum
.
NotFound
{
t
.
Fatalf
(
"err should be `ethereum.NotFound` but received %v"
,
err
)
}
// generate a transaction and confirm you can retrieve it
code
:=
`6060604052600a8060106000396000f360606040526008565b00`
var
gas
uint64
=
3000000
tx
:=
types
.
NewContractCreation
(
0
,
big
.
NewInt
(
0
),
gas
,
big
.
NewInt
(
1
),
common
.
FromHex
(
code
))
tx
,
_
=
types
.
SignTx
(
tx
,
types
.
HomesteadSigner
{},
key
)
err
=
sim
.
SendTransaction
(
context
.
Background
(),
tx
)
if
err
!=
nil
{
t
.
Fatal
(
"error sending transaction"
)
}
txHash
=
tx
.
Hash
()
_
,
isPending
,
err
=
sim
.
TransactionByHash
(
context
.
Background
(),
txHash
)
if
err
!=
nil
{
t
.
Fatalf
(
"error getting transaction with hash: %v"
,
txHash
.
String
())
}
if
!
isPending
{
t
.
Fatal
(
"transaction should have pending status"
)
}
sim
.
Commit
()
tx
,
isPending
,
err
=
sim
.
TransactionByHash
(
context
.
Background
(),
txHash
)
if
err
!=
nil
{
t
.
Fatalf
(
"error getting transaction with hash: %v"
,
txHash
.
String
())
}
if
isPending
{
t
.
Fatal
(
"transaction should not have pending status"
)
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment