• Overview

  • Overview
  • Blockchain

  • Blockchain
  • BlocksTransactionsTop accounts
  • Validators

  • Validators
  • Proposals

  • Proposals
  • Utilities

  • Utilities
  • ParametersConsensusUptimeAPI
  • Relayers

  • Relayers
  • Nodes

  • Nodes

mainnet

agoric-3

Latest Block

‌
‌

Powered by

STAKEME
Backend: —Frontend: v4.6.0-50bb8e0e

Company

About usStakingFaucetBrand kit

Contribute

Contact usBug reportStatus page

Socials

Proposal details

#94 Fast USDC: Beta support for EVM destinations

Passed
CoreEvalProposal

discussion: https://community.agoric.com/t/fast-usdc-beta-support-for-evm-destinations/843 software release: https://github.com/Agoric/agoric-sdk/releases/tag/fast-usdc-cctp-b1 `04bd001`

Submit time: 14 May 2025, 19:56

Details

Voting period

100.00%

14 May 2025, 19:5617 May 2025, 19:56

Core Eval Proposal

  • Title

    Fast USDC: Beta support for EVM destinations

  • Type

    CoreEvalProposal

  • Data
    {
    "evals":[
    0:{
    "jsonPermits":"{ "consume": { "fastUsdcKit": true, "agoricNamesAdmin": "makeCoreProposalBehavior", "vatAdminSvc": "makeCoreProposalBehavior", "zoe": "makeCoreProposalBehavior" }, "evaluateBundleCap": "makeCoreProposalBehavior", "installation": { "produce": "makeCoreProposalBehavior" }, "modules": { "utils": { "runModuleBehaviors": "makeCoreProposalBehavior" } } }"
    "jsCode":"// This is generated by writeCoreEval; please edit! /* eslint-disable */ const manifestBundleRef = {bundleID:"b1-400dad00c228fbca60099577d1e2ffc14f502fb1b698330edd0cad7b985e3975489d4104e4b2c467f8fbdc244792415432383805d30f50c74b0608a749327612"}; const getManifestCall = harden([ "getManifestForUpgradeEvmDests", { installKeys: { fastUsdc: { bundleID: "b1-2412ad1aecd532da4bd8003718925fe907098fe7afa69b61b67aac7a265229a8d1a8c30d1a8368c62d121087a4f6895f5d2fca9de54a965be99bf6a88ecedfb6", }, }, options: {}, }, ]); const customManifest = { upgradeEvmDests: { consume: { fastUsdcKit: true, }, }, }; // Make a behavior function and "export" it by way of script completion value. // It is constructed by an anonymous invocation to ensure the absence of a global binding // for makeCoreProposalBehavior, which may not be necessary but preserves behavior pre-dating // https://github.com/Agoric/agoric-sdk/pull/8712 . const behavior = (({ manifestBundleRef, getManifestCall: [manifestGetterName, ...manifestGetterArgs], customManifest, E, log = console.info, customRestoreRef, }) => { const { entries, fromEntries } = Object; /** * Given an object whose properties may be promise-valued, return a promise * for an analogous object in which each such value has been replaced with its * fulfillment. * This is a non-recursive form of endo `deeplyFulfilled`. * * @template T * @param {{[K in keyof T]: (T[K] | Promise<T[K]>)}} obj * @returns {Promise<T>} */ const shallowlyFulfilled = async obj => { if (!obj) { return obj; } const awaitedEntries = await Promise.all( entries(obj).map(async ([key, valueP]) => { const value = await valueP; return [key, value]; }), ); return fromEntries(awaitedEntries); }; const makeRestoreRef = (vatAdminSvc, zoe) => { /** @type {(ref: import\('./externalTypes.js').ManifestBundleRef) => Promise<Installation<unknown>>} */ const defaultRestoreRef = async bundleRef => { // extract-proposal.js creates these records, and bundleName is // the optional name under which the bundle was installed into // config.bundles const bundleIdP = 'bundleName' in bundleRef ? E(vatAdminSvc).getBundleIDByName(bundleRef.bundleName) : bundleRef.bundleID; const bundleID = await bundleIdP; const label = bundleID.slice(0, 8); return E(zoe).installBundleID(bundleID, label); }; return defaultRestoreRef; }; /** @param {ChainBootstrapSpace & BootstrapPowers & { evaluateBundleCap: any }} powers */ const coreProposalBehavior = async powers => { // NOTE: `powers` is expected to match or be a superset of the above `permits` export, // which should therefore be kept in sync with this deconstruction code. // HOWEVER, do note that this function is invoked with at least the *union* of powers // required by individual moduleBehaviors declared by the manifest getter, which is // necessary so it can use `runModuleBehaviors` to provide the appropriate subset to // each one (see ./writeCoreEvalParts.js). // Handle `powers` with the requisite care. const { consume: { vatAdminSvc, zoe, agoricNamesAdmin }, evaluateBundleCap, installation: { produce: produceInstallations }, modules: { utils: { runModuleBehaviors }, }, } = powers; // Get the on-chain installation containing the manifest and behaviors. log('evaluateBundleCap', { manifestBundleRef, manifestGetterName, vatAdminSvc, }); let bcapP; if ('bundleName' in manifestBundleRef) { bcapP = E(vatAdminSvc).getNamedBundleCap(manifestBundleRef.bundleName); } else if ('bundleID' in manifestBundleRef) { bcapP = E(vatAdminSvc).getBundleCap(manifestBundleRef.bundleID); } else { const keys = Reflect.ownKeys(manifestBundleRef).map(key => typeof key === 'string' ? JSON.stringify(key) : String(key), ); const keysStr = `[${keys.join(', ')}]`; throw Error( `bundleRef must have own bundleName or bundleID, missing in ${keysStr}`, ); } const bundleCap = await bcapP; const proposalNS = await evaluateBundleCap(bundleCap); // Get the manifest and its metadata. log('execute', { manifestGetterName, bundleExports: Object.keys(proposalNS), }); const restoreRef = customRestoreRef || makeRestoreRef(vatAdminSvc, zoe); const { manifest, options: rawOptions, installations: rawInstallations, } = await proposalNS[manifestGetterName]( harden({ restoreRef }), ...manifestGetterArgs, ); // Await promises in the returned options and installations records. const [options, installations] = await Promise.all( [rawOptions, rawInstallations].map(shallowlyFulfilled), ); // Publish the installations for our dependencies. const installationEntries = entries(installations || {}); if (installationEntries.length > 0) { const installAdmin = E(agoricNamesAdmin).lookupAdmin('installation'); await Promise.all( installationEntries.map(([key, value]) => { produceInstallations[key].reset(); produceInstallations[key].resolve(value); return E(installAdmin).update(key, value); }), ); } // Evaluate the manifest. return runModuleBehaviors({ // Remember that `powers` may be arbitrarily broad. allPowers: powers, behaviors: proposalNS, manifest: customManifest || manifest, makeConfig: (name, _permit) => { log('coreProposal:', name); return { options }; }, }); }; return coreProposalBehavior; })({ manifestBundleRef, getManifestCall, customManifest, E }); behavior; "
    }
    ]
    "@type":"/agoric.swingset.CoreEvalProposal"
    }