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:
iterateLatest
Short-term goals:
makePublisherKit
PRiterateEach
with the lossless forward iteration algorithm via the Agoric/agoric-sdk#5466 x/vstream
PR