All notable changes to this project will be documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- 1.1.18 - 2025-01-28
- 1.1.17 - 2024-12-24
- 1.1.16 - 2024-12-01
- 1.1.15 - 2024-11-26
- 1.1.14 - 2024-11-01
- 1.1.13 - 2024-11-01
- 1.1.12 - 2024-10-31
- 1.1.11 - 2024-10-23
- 1.1.10 - 2024-10-20
- 1.1.9 - 2024-10-01
- 1.1.8 - 2024-09-17
- 1.1.7 - 2024-09-10
- 1.1.6 - 2024-09-09
- 1.1.5 - 2024-09-06
- 1.1.4 - 2024-09-05
- 1.1.3 - 2024-09-04
- 1.1.2 - 2024-09-02
- 1.1.1 - 2024-08-28
- 1.1.0 - 2024-08-19
- 1.0.0 - 2024-06-06
- Added support for BEEF v2 and AtomicBEEF
- Update golang.org/x/crypto from v0.21.0 to v0.31.0
- Update README to highlight examples and improve documentation
- Update golangci-lint configuration to handle mixed receiver types
- update issue templates
- Improved test coverage
ScriptNumber
type
- ArcBroadcaster Status
- ensure BUMP ordering in BEEF
- Fix arc broadcaster to handle script failures
- support new headers in arc broadcaster
- Update examples and documentation to reflect
tx.Sign
using script templates
- Broadcaster examples
- WOC Broadcaster
- TAAL Broadcaster
- Tests for woc, taal, and arc broadcasters
- fix
spv.Verify()
to work with source output (separate fix from 1.1.11)
- fix
spv.Verify()
to work with source output
Big thanks for contributions from @wregulski
pubKey.ToDER()
now returns bytespubKey.ToHash()
is nowpubKey.Hash()
pubKey.SerializeCompressed()
is nowpubKey.Compressed()
pubKey.SerializeUncompressed()
is nowpubKey.Uncompressed()
pubKey.SerializeHybrid()
is nowpubKey.Hybrid()
- updated
merklepath.go
to use new helper functions fromtransaction.merkletreeparent.go
- files
spv/verify.go
,spv/verify_test.go
- chain tracker for whatsonchain.comspv.Verify()
ensures transaction scripts, merkle paths and fees are validspv.VerifyScripts()
ensures transaction scripts are valid
- file
docs/examples/verify_transaction/verify_transaction.go
publickey.ToDERHex()
returns a hex encoded public keyscript.Chunks()
helper method forDecodeScript(scriptBytes)
script.PubKey()
returns a*ec.PublicKey
script.PubKeyHex()
returns a hex stringscript.Address()
andscript.Addresses()
helpers- file
transaction.merkletreeparent.go
which contains helper functionstransaction.MerkleTreeParentStr()
transaction.MerkleTreeParentBytes()
transaction.MerkleTreeParents()
- file
transaction/chaintracker/whatsonchain.go
,whatsonchain_test.go
- chain tracker for whatsonchain.comchaintracker.NewWhatsOnChain
chaintracker
- Updated readme
- Improved test coverage
- Update golangci-lint version in sonar workflow
- Restore Transaction
Clone
to its previous state, and addShallowClone
as a more efficient alternative - Fix the version number bytes in
message
- Rename
merkleproof.ToHex()
toHex()
- Update golangci-lint version and rules
transaction.ShallowClone
transaction.Hex
- Rework
tx.Clone()
to be more efficient - Introduce SignUnsigned to sign only inputs that have not already been signed
- Added tests
- Other minor performance improvements.
- New method
Transaction.SignUnsigned()
Transaction.Clone()
does not reconstitute the source transaction from bytes. Creates a new transaction.
- Optimize handling of source transaction inputs. Avoid mocking up entire transaction when adding source inputs.
- Minor alignment in ECIES helper function
- New method
TransactionInput.SourceTxOutput()
SetSourceTxFromOutput
changed to beSetSourceTxOutput
- Default behavior of
EncryptSingle
uses ephemeral key. Updated test.
- Add test for ephemeral private key in electrum encrypt ecies
- Add support for compression for backward compatibility and alignment with ts
NewAddressFromPublicKeyWithCompression
, toscript/address.go
andSignMessageWithCompression
tobsm/sign.go
- Additional tests
- Update ECIES implementation to align with the typescript library
primitives/aescbc
directoryAESCBCEncrypt
,AESCBCDecrypt
,PKCS7Padd
,PKCS7Unpad
compat/ecies
EncryptSingle
,DecryptSingle
,EncryptShared
andDecryptShared
convenience functions that deal with strings, uses Electrum ECIES and typical defaultsElectrumEncrypt
,ElectrumDecrypt
,BitcoreEncrypt
,BitcoreDecrypt
docs/examples
ecies_shared
,ecies_single
,ecies_electrum_binary
- Tests for different ECIES encryption implementations
- Previous ecies implementation
- Outdated ecies example
- encryption.go for vanilla AES encryption (to align with typescript library)
- Renamed
message
example toencrypt_message
for clarity - Change vanilla
aes
example to use existing encrypt/decrypt functions fromaesgcm
directory
- Add shamir key splitting
- Added PublicKey.ToHash() - sha256 hash, then ripemd160 of the public key (matching ts implementation)`
- Added new KeyShares and polynomial primitives, and polynomial operations to support key splitting
- Tests for all new keyshare, private key, and polynomial operations
- added recommended vscode plugin and extension settings for this repo in .vscode directory
- handle base58 decode errors
- additional tests for script/address.go
PrivateKey.ToKeyShares
PrivateKey.ToPolynomial
PrivateKey.ToBackupShares
PrivateKeyFromKeyShares
PrivateKeyFromBackupShares
PublicKey.ToHash()
- New tests for the new
PrivateKey
methods - new primitive
keyshares
NewKeyShares
returns a newKeyShares
structNewKeySharesFromBackupFormat
KeyShares.ToBackupFormat
polonomial.go
and tests for core functionality used byKeyShares
andPrivateKey
util.Umod
inutil
packagebig.go
util.NewRandomBigInt
inutil
packagebig.go
base58.Decode
now returns an error in the case of invalid characters
- Fix OP_BIN2NUM to copy bytes and prevent stack corruption & add corresponding test
opcodeBin2num
now copies value before minimally encoding
- Fix OP_RETURN data & add corresponding test
- update release instructions
- add additional test transaction
- add additional script tests, fix test code
opcodeReturn
now includes anyparsedOp.Data
present afterOP_RETURN
- Changed RELEASE.md instructions
- porting in all optimizations by Teranode team to their active go-bt fork
- introducing chainhash to remove type coercion on tx hashes through the project
- remove ByteStringLE (replaced by chainhash)
- update opRshift and opLshift modeled after C code in node software and tested against failing vectors
- add tests and vectors for txs using opRshift that were previously failing to verify
- update examples
- lint - change international spellings to match codebase standards, use require instead of assert, etc
- add additional test vectors from known failing transactions
MerkePath.ComputeRootHex
MerklePath.VerifyHex
SourceTXID
onTransactionInput
is now aChainHash
instead of[]byte
IsValidRootForHeight
onChainTracker
now takes aChainHash
instead of[]byte
MerklePath.ComputeRoot
now takes aChainHash
instead of a hexstring
.MerklePath.Verify
now takes aChainHash
instead of hexstring
.Transaction.TxID
now returns aChainHash
instead of a hexstring
Transaction.PreviousOutHash
was renamed toSourceOutHash
, and returns aChainHash
instead of[]byte
- The
TxID
field of theUTXO
struct in thetransaction
package is now aChainHash
instead of[]byte
- Renamed
TransactionInput.SetPrevTxFromOutput
toSetSourceTxFromOutput
TransactionInput.PreviousTxIDStr
Transaction.TxIDBytes
UTXO.TxIDStr
in favor ofUTXO.TxID.String()
opcodeRShift
andopcodeLShift
was fixed to match node logic and properly execute scripts usingOP_RSHIFT
andOP_LSHIFT
.
- Initial release
Replace X.X.X
with the new version number and YYYY-MM-DD
with the release date:
## [X.X.X] - YYYY-MM-DD
### Added
-
### Changed
-
### Deprecated
-
### Removed
-
### Fixed
-
### Security
-
Use this template as the starting point for each new version. Always update the "Unreleased" section with changes as they're implemented, and then move them under the new version header when that version is released.