mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
add a test and add missing Delegate tx support to helper functions
This commit is contained in:
parent
5c86aadd0b
commit
30cf14ba1e
2 changed files with 68 additions and 1 deletions
|
|
@ -3568,6 +3568,65 @@ func testEIP2718Transition(t *testing.T, scheme string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEIP5806Transition(t *testing.T) {
|
||||||
|
var (
|
||||||
|
engine = ethash.NewFaker()
|
||||||
|
|
||||||
|
// A sender who makes transactions, has some funds
|
||||||
|
key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291")
|
||||||
|
address = crypto.PubkeyToAddress(key.PublicKey)
|
||||||
|
funds = big.NewInt(1000000000000000)
|
||||||
|
gspec = &Genesis{
|
||||||
|
Config: params.TestChainConfig,
|
||||||
|
Alloc: GenesisAlloc{
|
||||||
|
address: {Balance: funds},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
contractAddr = crypto.CreateAddress(address, 0)
|
||||||
|
storageDeploy = common.Hex2Bytes("608060405234801561001057600080fd5b5060c78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632e64cec11460375780636057361d146053575b600080fd5b603d607e565b6040518082815260200191505060405180910390f35b607c60048036036020811015606757600080fd5b81019080803590602001909291905050506087565b005b60008054905090565b806000819055505056fea2646970667358221220aca4d6522f4cac72207b299362b5c5b4bead4107337f028ad714bf8036a5e9a464736f6c63430007060033")
|
||||||
|
)
|
||||||
|
// Generate blocks
|
||||||
|
_, blocks, _ := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) {
|
||||||
|
signer := types.LatestSigner(gspec.Config)
|
||||||
|
|
||||||
|
b.SetCoinbase(common.Address{1})
|
||||||
|
|
||||||
|
txCreate, _ := types.SignTx(types.NewContractCreation(0, big.NewInt(0), 1000000, b.header.BaseFee, storageDeploy), signer, key)
|
||||||
|
b.AddTx(txCreate)
|
||||||
|
|
||||||
|
// One transaction to the contract
|
||||||
|
tx, _ := types.SignNewTx(key, signer, &types.DelegateTx{
|
||||||
|
ChainID: gspec.Config.ChainID,
|
||||||
|
Nonce: 1,
|
||||||
|
To: &contractAddr,
|
||||||
|
Gas: 30000,
|
||||||
|
GasPrice: b.header.BaseFee,
|
||||||
|
AccessList: types.AccessList{{
|
||||||
|
Address: contractAddr,
|
||||||
|
StorageKeys: []common.Hash{{0}},
|
||||||
|
}},
|
||||||
|
})
|
||||||
|
b.AddTx(tx)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Import the canonical chain
|
||||||
|
chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), DefaultCacheConfigWithScheme(rawdb.PathScheme), gspec, nil, engine, vm.Config{}, nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create tester chain: %v", err)
|
||||||
|
}
|
||||||
|
defer chain.Stop()
|
||||||
|
|
||||||
|
if n, err := chain.InsertChain(blocks); err != nil {
|
||||||
|
t.Fatalf("block %d: failed to insert into chain: %v", n, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
state, _ := chain.State()
|
||||||
|
code := state.GetCode(contractAddr)
|
||||||
|
if len(code) == 0 {
|
||||||
|
t.Fatal("created contract has length 0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestEIP1559Transition tests the following:
|
// TestEIP1559Transition tests the following:
|
||||||
//
|
//
|
||||||
// 1. A transaction whose gasFeeCap is greater than the baseFee is valid.
|
// 1. A transaction whose gasFeeCap is greater than the baseFee is valid.
|
||||||
|
|
|
||||||
|
|
@ -332,7 +332,7 @@ func (s eip2930Signer) Sender(tx *Transaction) (common.Address, error) {
|
||||||
switch tx.Type() {
|
switch tx.Type() {
|
||||||
case LegacyTxType:
|
case LegacyTxType:
|
||||||
return s.EIP155Signer.Sender(tx)
|
return s.EIP155Signer.Sender(tx)
|
||||||
case AccessListTxType:
|
case AccessListTxType, DelegateTxType:
|
||||||
// AL txs are defined to use 0 and 1 as their recovery
|
// AL txs are defined to use 0 and 1 as their recovery
|
||||||
// id, add 27 to become equivalent to unprotected Homestead signatures.
|
// id, add 27 to become equivalent to unprotected Homestead signatures.
|
||||||
V = new(big.Int).Add(V, big.NewInt(27))
|
V = new(big.Int).Add(V, big.NewInt(27))
|
||||||
|
|
@ -357,6 +357,14 @@ func (s eip2930Signer) SignatureValues(tx *Transaction, sig []byte) (R, S, V *bi
|
||||||
}
|
}
|
||||||
R, S, _ = decodeSignature(sig)
|
R, S, _ = decodeSignature(sig)
|
||||||
V = big.NewInt(int64(sig[64]))
|
V = big.NewInt(int64(sig[64]))
|
||||||
|
case *DelegateTx:
|
||||||
|
// Check that chain ID of tx matches the signer. We also accept ID zero here,
|
||||||
|
// because it indicates that the chain ID was not specified in the tx.
|
||||||
|
if txdata.ChainID.Sign() != 0 && txdata.ChainID.Cmp(s.chainId) != 0 {
|
||||||
|
return nil, nil, nil, fmt.Errorf("%w: have %d want %d", ErrInvalidChainId, txdata.ChainID, s.chainId)
|
||||||
|
}
|
||||||
|
R, S, _ = decodeSignature(sig)
|
||||||
|
V = big.NewInt(int64(sig[64]))
|
||||||
default:
|
default:
|
||||||
return nil, nil, nil, ErrTxTypeNotSupported
|
return nil, nil, nil, ErrTxTypeNotSupported
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue