All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog (modification: no type change headlines) and this project adheres to Semantic Versioning.
Attention! This new version is part of a series of EthereumJS releases all moving to a new scoped package name format. In this case the library is renamed as follows:
ethereumjs-tx
->@ethereumjs/tx
Please update your library references accordingly or install with:
npm i @ethereumjs/tx
This release is a major refactoring of the transaction library to simplify and strengthen its code base. Refactoring work has been done along PR #812 and PR #887.
The constructor has been reworked and new static factory methods fromTxData
, fromRlpSerializedTx
, and fromValuesArray
have been added for a more TypeScript
friendly and less error-prone way to initialize a Transaction
object. The direct usage of the main constructor (now just being an alias to Tx.fromTxData()
, see PR #944) is now discouraged and the static factory methods should be used.
Breaking: Note that you need to adopt your Transaction
initialization code since the constructor API has changed!
Examples:
// Initializing from serialized data
const s1 = tx1.serialize().toString('hex')
const tx = Transaction.fromRlpSerializedTx(toBuffer('0x' + s1))
// Initializing with object
const txData = {
gasPrice: 1000,
gasLimit: 10000000,
value: 42,
}
const tx = Transaction.fromTxData(txData)
// Initializing from array of 0x-prefixed strings.
// First, convert to array of Buffers.
const arr = txFixture.raw.map(toBuffer)
const tx = Transaction.fromValuesArray(arr)
Learn more about the full API in the docs.
The returned transaction is now frozen and immutable. To work with a maliable transaction, copy it with const fakeTx = Object.create(tx)
. For security reasons it is highly recommended to stay in a freezed Transaction
context on usage.
If you need Transaction
mutability - e.g. because you want to subclass Transaction
and modifiy its behavior - there is a freeze
option to prevent the Object.freeze()
call on initialization, see PR #941.
The tx.from
alias was removed, please use const from = tx.getSenderAddress()
.
Getting a message to sign has been changed from calling tx.hash(false)
to tx.getMessageToSign()
.
The FakeTransaction
class was removed since its functionality can now be implemented with less code. To create a fake tansaction for use in e.g. VM.runTx()
overwrite getSenderAddress
with your own Address
. See a full example in the section in the README.
Breaking: The default HF on the library has been updated from petersburg
to istanbul
, see PR #906.
The HF setting is now automatically taken from the HF set for Common.DEAULT_HARDFORK
, see PR #863.
We significantly updated our internal tool and CI setup along the work on PR #913 with an update to ESLint
from TSLint
for code linting and formatting and the introduction of a new build setup.
Packages now target ES2017
for Node.js builds (the main
entrypoint from package.json
) and introduce a separate ES5
build distributed along using the browser
directive as an entrypoint, see PR #921. This will result in performance benefits for Node.js consumers, see here for a releated discussion.
Changes and Refactoring
- Updated
ethereumjs-util
to v7, PR #748 - Replaced
new Buffer()
(deprecated) statements withBuffer.from()
, PR #721 - Dropped
ethereumjs-testing
dev dependency, PR #953
This is the first release candidate towards a final library release, see beta.2 and especially beta.1 release notes for an overview on the full changes since the last publicly released version.
- Dropped
ethereumjs-testing
dev dependency, PR #953
This is the second beta release towards a final library release, see beta.1 release notes for an overview on the full changes since the last publicly released version.
- Added
freeze
option to allow for transaction freeze deactivation (e.g. to allow for subclassing tx and adding additional parameters), see PR #941 - Breaking: Reworked constructor to take in data as a
TxData
typed dictionary instead of single values, theTx.fromTxData()
factory method becomes an alias for the constructor with this change, see PR #944
Attention! This new version is part of a series of EthereumJS releases all moving to a new scoped package name format. In this case the library is renamed as follows:
ethereumjs-tx
->@ethereumjs/tx
Please update your library references accordingly or install with:
npm i @ethereumjs/tx
This release is a major refactoring of the transaction library to simplify and strengthen its code base. Refactoring work has been done along PR #812 and PR #887.
The constructor used to accept a varying amount of options but now has the following shape:
Transaction(
nonce: BN,
gasPrice: BN,
gasLimit: BN,
to: Address | undefined,
value: BN,
data: Buffer,
v?: BN,
r?: BN,
s?: BN,
opts?: TxOptions
)
Initializing from other data types is assisted with new static factory helpers fromTxData
, fromRlpSerializedTx
, and fromValuesArray
.
Examples:
// Initializing from serialized data
const s1 = tx1.serialize().toString('hex')
const tx = Transaction.fromRlpSerializedTx(toBuffer('0x' + s1))
// Initializing with object
const txData = {
gasPrice: 1000,
gasLimit: 10000000,
value: 42,
}
const tx = Transaction.fromTxData(txData)
// Initializing from array of 0x-prefixed strings.
// First, convert to array of Buffers.
const arr = txFixture.raw.map(toBuffer)
const tx = Transaction.fromValuesArray(arr)
Learn more about the full API in the docs.
The returned transaction is now frozen and immutable. To work with a maliable transaction, copy it with const fakeTx = Object.create(tx)
.
The tx.from
alias was removed, please use const from = tx.getSenderAddress()
.
Getting a message to sign has been changed from calling tx.hash(false)
to tx.getMessageToSign()
.
The FakeTransaction
class was removed since its functionality can now be implemented with less code. To create a fake tansaction for use in e.g. VM.runTx()
overwrite getSenderAddress
with your own Address
. See a full example in the section in the README.
Breaking: The default HF on the library has been updated from petersburg
to istanbul
, see PR #906.
The HF setting is now automatically taken from the HF set for Common.DEAULT_HARDFORK
,
see PR #863.
We significantly updated our internal tool and CI setup along the work on
PR #913 with an update to ESLint
from TSLint
for code linting and formatting and the introduction of a new build setup.
Packages now target ES2017
for Node.js builds (the main
entrypoint from package.json
) and introduce
a separate ES5
build distributed along using the browser
directive as an entrypoint, see
PR #921. This will result
in performance benefits for Node.js consumers, see here for a releated discussion.
Changes and Refactoring
- Updated
ethereumjs-util
to v7, PR #748 - Replaced
new Buffer()
(deprecated) statements withBuffer.from()
, PR #721
2.1.2 - 2019-12-19
- Added support for the
MuirGlacier
HF by updating theethereumjs-common
dependency to v1.5.0
2.1.1 - 2019-08-30
2.1.0 - 2019-06-28
Using testnets and custom/private networks is now easier
This release is focused on making this library easier to use in chains other than mainnet
.
Using standard testnets can be as easy as passing their names to the Transaction
constructor. For
example, new Transaction(rawTx, {chain: 'ropsten', hardfork: 'byzantium'})
is enough to use this
library with Ropsten on Byzantium.
If you are using a custom network, you can take advantage of ethereumjs-common,
which contains all the network parameters. In this version of ethereumjs-tx
you can use its new
Common.forCustomNetwork
to create a Common
instance based on a standard network with some
parameters changed. You can see an example of how to do this here.
List of changes:
- Upgraded ethereumjs-common to
^1.3.0
- Added more documentation and examples on how to create transactions for public testnets and custom networks.
2.0.0 - 2019-06-03
TypeScript / Module Import / Node Support
First TypeScript
based release of the library, see
PR #145 for details.
This comes along with some changes on the API, Node import of the exposed classes now goes like this:
const EthereumTx = require('ethereumjs-transaction').Transaction
const FakeEthereumTx = require('ethereumjs-transaction').FakeTransaction
The library now also comes with a type declaration file distributed along with the package published.
Along with this release we drop official support for Node
versions 4
,5
and 6
. Officially tested versions are now Node
8
, 10
and 11
(see PRs #138 and
#146).
Hardfork Support / Official Test Updates
Along with a long overdue update of the official Ethereum Transaction tests
(see PRs #131 and
#138 for
FakeTransaction
) and
an introduction of setting chain and hardfork by using our shared
ethereumjs-common class
(see PR #131) the
transaction library now supports all HFs up to the Petersburg
hardfork,
see constructor option docs for information on instantiation and default values (current hardfork default: petersburg
).
API Changes:
- Removal of the
data.chainId
parameter, use theopts.chain
parameter or a customCommon
instance
Default EIP-155 Support
Along with defaulting to a post-Spurious Dragon
HF replay protection from
EIP-155 is now activated by default. Transactions are subsequently also by default signed with EIP-155
replay protection,
see PRs #153,
#147 and
#143.
This comes with some changes in how different v
values passed on instantation
or changed on runtime are handled:
- The constructor throws if the
v
value is present, indicates thatEIP-155
was enabled, and the chain id it indicates doesn't match the one of the internalcommon
object - No default
v
is set. If a transaction isn't signed, it would be an empty buffer - If
v
is changed after construction its value is validated in its setter
For activating non-EIP-155
behavior instantiate the transaction with a
pre-Spurious Dragon
hardfork option.
1.3.7 - 2018-07-25
- Fix bug causing
FakeTransaction.from
to not retrieve sender address from tx signature, see PR #118
1.3.6 - 2018-07-02
- Fixes issue #108 with the
FakeTransaction.hash()
function by reverting the introduced signature handling changes in Fake transaction hash creation from PR #94 introduced inv1.3.5
. The signature is now again only created and added to the hash whenfrom
address is set andfrom
is not defaulting to the zero adress any more, see PR #110 - Added additional tests to cover issue described above
1.3.5 - 2018-06-22
- Include signature by default in
FakeTransaction.hash
, PR #97 - Fix
FakeTransaction
signature failure bug, PR #94
1.3.4 - 2018-03-06
- Fix a bug producing hash collisions on
FakeTransaction
for different senders, PR #81 - Switched from deprecated
es2015
toenv
babel preset, PR #86 - Dropped Node 4 support
1.3.3 - 2017-07-12
- Allow zeros in
v
,r
,s
signature values - Dropped
browserify
transform frompackage.json
- (combined v1.3.3 and v1.3.2 release notes)
1.3.1 - 2017-05-13
- Added
ES5
build
1.3.0 - 2017-04-24
EIP155
: allowv
value to be greater than one byte (replay attack protection)- Added
browserify
ES2015
transform topackage.json
- Improved documentation
- (combined v1.3.0, v1.2.5 and v1.2.4 release notes)
1.2.3 - 2017-01-30
EIP155
hash implementation- README example and doc fixes
1.2.2 - 2016-12-15
- Moved
chainId
param totxParams
, parsesig
forchainId
(EIP155
refactor) - Test improvements
- (combined v1.2.2 and v1.2.1 release notes)
1.2.0 - 2016-12-14
- Added
EIP155
changes - Renamed
chain_id
tochainId
- Node 4/5 compatibility
ES6
standards