This Agoric Casting package follows ocap broadcasts in a flexible, future-proof way.
TL;DR: You can run yarn demo, or to follow a mailbox castingSpec do:
npx agoric follow -Bhttp://devnet.agoric.net/network-config :mailbox.agoric1foobarbaz -otext
An example of following an on-chain mailbox in code (using this package) is:
// First, obtain a Hardened JS environment via Endo.
import '@endo/init/pre-remoting.js'; // needed only for the next line
import '@endo/init';
import {
iterateLatest,
makeFollower,
makeLeader,
makeCastingSpec,
} from '@agoric/casting';
// Iterate over a mailbox follower on the devnet.
const leader = makeLeader('https://devnet.agoric.net/network-config');
const castingSpec = makeCastingSpec(':mailbox.agoric1foobarbaz');
const follower = makeFollower(castingSpec, leader);
for await (const { value } of iterateLatest(follower)) {
console.log(`here's a mailbox value`, value);
}
The followerOpts argument in makeFollower(leader, key, followerOpts) provides an optional bag of options:
proof option, which has three possibilities:
'strict' - release data only after proving it was validated (may incur waits for one block's data to be validated in the next block),'optimistic' (default) - release data immediately, but may crash the follower in the future if an already-released value could not be proven,'none' - release data immediately without validationdecode option is a function to translate buf: Uint8Array into data: string
JSON.parse itunserializer option can be
makeMarshal()null - don't additionally unserialize data before releasing itE(unserializer).fromCapData(data)crasher option can be
null (default) follower failures only propagate an exception/rejectionE(crasher).crash(reason)makeLeaderFromRpcAddresses directly
if you want to avoid fetching a network-config.state_change eventmarshaller for your application.iterateRecent adapter transforms a follower into a local async iterator
that produces only the last queried value (with no history reconstruction)This package currently depends on:
iterateLatestShort-term goals:
makePublisherKit PRiterateEach with the lossless forward iteration algorithm via the Agoric/agoric-sdk#5466 x/vstream PR