ECDSA Keys
Arweave supports ECDSA secp256k1 signing keys for blocks and transactions.
ECDSA support was activated at the 2.9 hard fork.
The key differences between RSA and ECDSA transactions are:
An ECDSA account can only sign a format=2 transaction.
The
ownerfield must be empty for ECDSA txs.The signature preimage is constructed slightly differently - the
owneris omitted from the recursively hashed list.The signature must be a 65-byte compact recoverable signature (64 bytes of
r || sfollowed by a 1-byte recovery id). The protocol recovers the public key from the signature before validating it.
Arweave ECDSA addresses are not compatible with Ethereum addresses. Although Ethereum uses secp256k1 too, its public-key-to-address scheme is different (Keccak-256 of the uncompressed public key, truncated to 20 bytes). Arweave uses the same encoding for RSA and ECDSA accounts: every address is the SHA-256 hash of the public key.
If you transfer AR to an Ethereum address on Arweave, you will lose the funds.
ECDSA transactions can be used for transferring tokens and uploading data, just like RSA txs.
There is no account delegation mechanism in Arweave.
Signing and verifying with arweave-js
Native ECDSA support is currently available in arweave-js in a dedicated branch.
It is published under the ec npm tag:
npm install arweave@ecYou can see how to create and use ECDSA wallets in the library docs.
Mining with ECDSA
Miners can use either RSA or ECDSA keys. ECDSA reward keys produce 65-byte block signatures, much shorter than RSA's 512-byte signatures.
To create a new ECDSA mining wallet, use the wallet create subcommand of the Arweave node:
Use rsa instead of ecdsa to create an RSA wallet.
The new keyfile is written to the wallets/ subdirectory of the node's data directory (data_dir), as a standard JWK JSON file named after the resulting Arweave address. On startup, the node automatically picks up keyfiles from wallets/ and detects the key type from the JWK; no extra configuration is needed to mine with ECDSA.
Last updated
Was this helpful?