Skip to content

AtomicAssets v2.0.0-rc5

Pre-release
Pre-release

Choose a tag to compare

@robrigo robrigo released this 16 Jul 04:07
· 3 commits to main since this release
fd7d730

The AtomicAssets v2 contract, release candidate 5. Built from main with CDT 4.1.1. rc4 describes the full v2 feature set; this candidate corrects one action's boundary behavior and is otherwise identical.

v2 remains a non-breaking, in-place upgrade of the v1 contract. Every existing table keeps its layout and every existing action keeps its signature, so v1 clients and indexers keep working. Upgrading is a setcode (plus setabi on accounts still running v1); existing on-chain state is preserved and no migration action is needed.

This is also the first candidate cut from main. The v2 work merged into the default branch (#9), which until now carried v1 while the release candidates were cut from the integration branch.

Changes since rc4

acceptauswap accepts on its acceptance_date. An author swap only became acceptable a second after the date it advertises. The guard read now > acceptance_date, so the boundary second itself was rejected with a [ 0 ] seconds remaining error. It now rejects only when now < acceptance_date, making the advertised second acceptable. A VeRT regression test pins the boundary and fails against the previous logic.

The same guard built its "seconds remaining" message unconditionally, because check() evaluates both of its arguments before it is called. On every successful accept, acceptance_date - now underflowed as a uint32_t and the resulting string was built and then discarded, spending CPU on the success path of a release whose Feature 8 is CPU optimization. The message is now built only on the path that shows it.

check_format takes its format by const reference. It never writes through the reference. Const states that in the signature and lets callers pass a const format. rc4 had already moved this parameter from by-value to by-reference as part of the Feature 8 work; this completes it.

Documentation and test hygiene. The test-directory listings in README.md and CLAUDE.md now match the tree, including the two directories they omitted entirely. Two template suites locate inline actions by action name rather than by position in the execution trace, so unrelated changes to inline dispatch no longer fail them.

Compatibility with rc4

The ABI is byte-identical to rc4 (b6389fdd…). The action surface, table layouts, and every field spelling are unchanged, so clients, wallets, and indexers built against rc4 work against rc5 without modification. Only the wasm differs, by the acceptauswap guard.

Upgrading an account already on rc4 is a setcode; setabi is a no-op.

Build and verification

Built with cdt-cpp 4.1.1 from a clean checkout of main at fd7d730. The published ABI is the legacy-compat patched build: vector<uint8_t> fields render as uint8[] and pair fields keep their first/second spellings, so integrations that read the ABI do not break. The VeRT suite is green at 40 suites and 325 tests, one skipped.

Artifacts

asset sha256
atomicassets.wasm 962a93e1adde9779d3afb84983cee076c3d2b50b0473c99fb0fe02573a7b7242
atomicassets.abi b6389fdde10a16f2d94b12bb10a67b676f6449b1293b57cc0b18256652cfef68

Verify against the attached SHA256SUMS.

Deploying

Pinned by sha256 in the FACINGS monorepo chain-config and deployed via the contracts-deploy workflow using the atomicassets@deploy permission, which is linked to eosio::setcode and eosio::setabi. Coming from rc1 through rc3, the holders cleanup ordering in the rc4 notes still applies. Pre-release, for testnet.

Credits

AtomicAssets is an open NFT standard created by Pink Network, with stewardship passing from Pink Network to Spielworks and then to FACINGS. The bulk of the v2 contract was authored by t-break (@on-a-t-break). The interface-header fix is from Aaron Cox (@aaroncox, Greymass). Full attribution is in AUTHORS.md.