Engineering Updates

  • 28 March 2022
    RUN Protocol, Swingset
    • RUNStake UI has been implemented. You can lien and unlien BLD, borrow and repay RUN, and see market/account data and history.
    • Parity Stability Module has been implemented.  This allows the direct trading of stable currencies with RUN.
    • Restival: Our week-long Purple Team security review of RUN Protocol architecture and code surfaced two notable findings, and numerous testing, documentation, and code improvements tagged audit-restival. During the review, we identified opportunities to automate security testing, improve tests, and develop tooling to exercise the code and economy through various scenarios. In addition to our findings, we also produced a series of new diagrams and threat models.
    • The swingset kernel now supports "multi-facet virtual objects", enabling multiple objects to share common state, but expose separate functionality. This allows e.g. Purses and DepositFacets to reference each other and common state, but be presented as distinct objects.
    • Initial support for "vat upgrades" has been added to the swingset kernel. Many features are still missing, but this will eventually enable contracts to be upgraded to new code (subject to governance controls).
    • The kernel now provides "durable Kinds", a special form of virtual object whose instances can survive a vat upgrade. Normal (non-durable) virtual objects are deleted during upgrade. The kernel also provides each version of the vat with a special durable collection, tentatively named "baggage", which passes the "Durable Kind Handles" to the new version so it can re-attach behavior to the retained objects.
    • We have the ability to invoke a method on a contract as a result of a governance vote.
    • Launch of RUN Protocol via Governance, instead of hard-coded bootstrap - 10min demo
    • Initial end-to-end testing of third-party oracle aggregated price feeds.  One of our prospective price feed providers successfully reproduced our Chainlink oracle work to trigger the submission of prices to an on-chain contract that aggregated them and produced a `priceAuthority` that can be consumed by other contracts.
  • 01 March 2022
    AMM, ERTP
    • Implemented support for Virtual Collections, which will make the platform much more scalable. Next is to utilize Virtual Objects and Collections in AMM, Vaults, getRUN, ERTP, and Zoe. We have also changed how we form composite keys so that they will be usable as keys for Virtual Collections.
    • Made Vaults transferable with ERTP. That means they can participate in contracts as first-class digital assets.
    • Separated production Vat bootstrap from testing and demo mechanisms.
    • Clawback vesting accounts were released into our mainnet and used to set up thousands of accounts. We are now contributing the code upstream to Cosmos.
    • Dynamic IBC (dIBC) reached another milestone of initiating an outbound IBC channel from within an autonomous Agoric VM contract. It is available via the Agoric Network API.
    • Devnet is our prototype for the transition from mainnet-0 to mainnet-1. Governance (validators can make executable proposals of JavaScript to run on-chain, vote on the proposals, and have them automatically executed if approved) is now testable in our devnet.
    • We have scheduled our “purple team” security exercise for the RUN Protocol for early March.
    • Audit of the Agoric Kernel (“Swingset”) scheduled for April.
  • 08 February 2022
    IBC, Mainnet0
    • Mainnet 0: First successful mainnet upgrade including BLD holder governance vote.  Software upgraded to improve Cosmos level vesting accounts.
    • RUN Protocol: progress on getRUN contracts and front end, and planning for upcoming Purple Team effort.
    • We have moved the core components of our distributed object model to Endo, where we are packaging them for chain-adjacent and off-chain applications. https://github.com/endojs/endo
    • Landed "virtual collections" to store high-cardinality tables (Map/Set/WeakMap/WeakSet) on disk instead of in RAM. These will also form the durable storage that survives contract upgrade. Implemented "raw devices" in the kernel, paving the way to bundlecaps and more efficient vat/contract source bundle management.
    • We initiated a dynamic IBC channel from an Agoric localnet JavaScript program, then minted 100hellocoin on the Cosmos testnet (scoped to our channel).  This is the first time that an outbound dIBC channel could be established from an unprivileged Agoric JS IBC port without having to manually intervene to help the relayer along.  With the modifications we suggested, Hermes is now capable of relaying dynamic IBC!
  • 07 January 2022
    Econ, Zoe
    • We distributed tokens on Agoric mainnet0 (ag0) for most of our private sale participants.
    • Econ: focused on preparation for the launch of the RUN Protocol.  getRUN contract design updated to allow active management. Contracts modified to allow for RUN Protocol to own assets and provide liquidity to the AMM. Bootstrap process work is ongoing.
    • Zoe: Removed metering and fees tracking at the Zoe layer to simplify code for Mainnet 1.  Prepared for Purple Teaming.
  • 08 December 2021
    AMM, SES
  • 01 November 2021
    ERTP, AMM
    • Merged code for contract governance. This makes it possible for a contract's parameters to be dynamically controlled by voters. The current choices of electorates includes only a committee, but more options are coming.
    • We also merged a new constant product AMM. There is still work to do to make it be the default AMM, but the framework is in place.
    • A number of deprecated features in ERTP are going to be removed soon as part of this PR:https://github.com/Agoric/agoric-sdk/pull/3892
    • ​​We have published SES 0.15.0, which is an opt-in upgrade. The new version supports configuration by Node.js environment variables and eliminates attack surface exposed by the deprecated Node.js domain module https://github.com/endojs/endo/blob/master/packages/ses/NEWS.md#0150-2021-11-02
  • 27 September 2021
    JavaScript, Testnet
    • Zip archives are now the default deployment format for Agoric contracts, removing a risky dependency on Rollup from the software supply chain, demonstrating the viability of our JavaScript Compartment proposal for isolating Node.js packages, and paving the way for LavaMoat integration and more efficient storage and transport of contracts to and from our chain.
    • We spun up a new devnet, agoricdev-4.  This network contains some of our fixes learned from the incentivised testnet, notably the Tendermint RPC performance improvements.
  • 20 September 2021
    SES
  • 06 September 2021
    Testnet
  • 23 August 2021
    Zoe, Cosmos
    • Zoe now "meters" contract code. Zoe measures the number of units of execution of contract code and requires that the contract owner pay for the execution in RUN. The contract owner is able to pass on the costs to users if they so choose through an additional fee specified in the invitation as part of the offer.  Zoe now charges fees for expensive calls to the Zoe Service, including "install", "startInstance", "offer", and "getPublicFacet". These fees are paid through a "feePurse" which is denominated in RUN and can be made through E(zoe).makeFeePurse().
    • On the Cosmos integration side, we fixed some nondeterminism (caused by simulated RPC transactions).  The ag-solo client connection to the chain has been made much more resilient, and will stay live even if its RPC node has been retried.
  • 16 August 2021
    SDK
    • We have finished migrating Agoric SDK onto Node.js’s own module system, removing a legacy emulation. This improves performance, developer experience, and makes Agoric’s code more portable.
  • 09 August 2021
    SDK
    • We have migrated two thirds of the Agoric SDK onto Node.js’s new module system, toward removing a legacy emulation.
  • 02 August 2021
    Zoe, ERTP
    • We added an attestation contract to packages/zoe https://github.com/Agoric/agoric-sdk/pull/3475. Attestations allow users to rely on a third-party claim that underlying assets have been escrowed, even if those assets are not on-chain ERTP tokens.
    • For instance, imagine that an art seller wants to represent their physical art as non-fungible tokens on a blockchain. The art seller wants users to be able to buy and sell the art, even without exchanging the physical art itself. The art seller can now create attestations that they have physically escrowed certain pieces of art. The value of these attestations depends entirely on the extent to which users believe the art seller has escrowed the physical art and will continue to do so.
    • Attestations are way of bringing off-chain assets on-chain via an authority claiming that the connection between the off-chain assets and the on-chain assets is trustworthy. Because attestations are non-fungible ERTP tokens, they can be used in any contract that accepts them, the same as any other ERTP token.
    • The particular attestation contract merged in PR 3475 produces ERTP tokens representing bonded staking tokens at the Cosmos level. Rather than an off-chain entity, Cosmos-level code is the authority of whether the underlying assets are escrowed, i.e. whether Cosmos-level staking tokens for a particular address have been bonded. The attestation contract is made of two reusable components for producing two different kinds of attestations, one which expires (https://github.com/Agoric/agoric-sdk/blob/master/packages/zoe/src/contracts/attestation/expiring/expiringNFT.js) and other which has to be returned to unlock the underlying token (https://github.com/Agoric/agoric-sdk/blob/master/packages/zoe/src/contracts/attestation/returnable/returnableNFT.js).
    • If you'd like to start using the attestation components in your own contract, feel free to reach out in the smart-contracts channel on Agoric Discord!
  • 26 July 2021
    SES, Endo
  • 19 July 2021
    SES, Zoe
    • Deep analysis of testnet data to characterize performance within and across validators during the stress test.
    • Continued progress on end-to-end implementation of Javascript level governance for the Agoric Treasury.
    • The groundwork laid for communication of staking status between Cosmos and Javascript layers to enable both governance and a yet-to-be-announced core economy function.
    • Developing metering implementation at both the kernel and Zoe levels.
    • Progress in building out browser-based wallet functionality.
    • The Realms proposal (part of SES) made it to stage 3 at tc39, the JavaScript standards committee. This means it will almost certainly become part of standard JavaScript.
  • 12 July 2021
    SES
    • A security review over SES has concluded with external auditor Least Authority.
    • The SES team and the MetaMask team have spent the whole week conducting an adversarial review of SES.
    • We completed the testnet's load testing phase, which produced some interesting data that we are using to improve our VM implementation.  There's still a lot of analysis to go!
  • 07 July 2021
    Swingset, Moddable
    • The SwingSet "comms" layer now implements full garbage collection, allowing cross-machine (e.g. solo-to-chain) references to be dropped and retired.
    • Restarting nodes from snapshots landed: we have measured speedups of up to 260x (23min to 6sec) in the Moddable XS JavaScript engine.
    • We've been working on the user experience of paying to use Zoe contracts and compensating the creator of the contract instance for the costs of execution.
  • 21 June 2021
    SES
    • Cross-vat garbage collection was added to the SwingSet kernel, enabling unreferenced objects to be dropped from their exporting vat and retired from the kernel data structures, saving memory and disk space.
    • SES 0.13.4 now contains a TypeScript definition covering lockdown, harden, Compartment, and assert, suitable both for TypeScript dependees and JSDoc type annotations https://github.com/endojs/endo/blob/master/packages/ses/NEWS.md#0134-2021-06-19
  • 08 June 2021
    Zoe
    • We're in the process of upgrading to Cosmos SDK 0.43.
    • BREAKING CHANGE: We are in the process of landing a major breaking API change to the Zoe Contract Facet (ZCF). Previously, in order for contract code to transfer escrowed assets from one seat (a seat is an active position in a contract) to another (for instance, in a swap between the two users), the contract code would have to manually calculate the new allocation for each seat, create a seatStaging  with the new allocation, and then reallocate over the seatStagings. This was complex enough that we had a helper, trade, that would do most of the work.
    • The new API is a major simplification of this process. Now, the contract code calls zcfSeat.incrementBy or zcfSeat.decrementBy, with the amounts to be subtracted or added to each seat. Then, the contract code calls zcf.reallocate with the seats as arguments. If offer safety and rights conservation hold, the new allocations are committed and the reallocation completes. This simplification makes the contract code much shorter and more readable. (For instance, it is easy to read the code and see that rights are conserved.) The simplification also allowed us to delete the trade helper.
  • 02 June 2021
    ERTP
  • 17 May 2021
    SES
    • We’ve improved the integrity of SES by replacing the role of Rollup in its toolchain with a solution based on SES itself. https://github.com/endojs/endo/issues/175
    • We made a number of breaking changes to Zoe and ERTP: https://github.com/Agoric/agoric-sdk/pull/2986. AmountMathKind and mathKind have been renamed to assetKind, and assetKind has been added to the displayInfo of a brand for easy rendering in UI. We also removed the deprecated zcfSeat.kickOut method, moved fakeVatAdmin to the tools directory, and removed the deprecated makePercent method.
  • 10 May 2021
    Xsnap
    • We upgraded the Agoric chain software ("cosmic-swingset") to use the "xsnap" worker for each contract vat, which is based on the XS JavaScript engine, rather than Node.js. This improves contract launch and overall chain startup times by an order of magnitude, and enables future enhancements like heap snapshots, which promise to speed things up even further.
    • We’ve developed support for hosting JS and CommonJS modules together in SES, and can now create Zip files with precompiled versions of both.
  • 10 May 2021
    Xsnap
    • We upgraded the Agoric chain software (“cosmic-swingset”) to use the “xsnap” worker for each contract vat, which is based on the XS JavaScript engine, rather than Node.js. This improves contract launch and overall chain startup times by an order of magnitude, and enables future enhancements like heap snapshots, which promise to speed things up even further.
    • We’ve developed support for hosting JS and CommonJS modules together in SES, and can now create Zip files with precompiled versions of both.
    • Phase 3 of the incentivized testnet is underway.