[PASSED] OP-PIP-11: Upgrade Blast Entropy Contract (Testnet)

Upgrade the current Pyth oracle contract on Blast Testnet to:

  1. Add a fee manager role that simplifies operations for randomness providers by letting their keeper wallet withdraw accrued fees
  2. Collect a share of the gas fees spent when interacting with Entropy

Running an Entropy keeper should be easy. At the moment, there is a significant pain point in maintaining the wallet balance for the keeper, because the keeper isn’t authorized to withdraw fees from the contract to recoup it’s gas expenses.

The gas fee collection change is additional Pyth revenue generated from usage of the oracle by downstream at no extra cost to users — it’s paid out from the centralized sequencer revenue.


The first change in this proposal updates the Blast Testnet Entropy contract to add a fee manager role. The fee manager is authorized by a provider to (1) set its fee, and (2) withdraw accrued fees. Providers can set the fee manager to their keeper wallet, which will enable their keeper service to better manage its gas.

The second change in this proposal updates the Blast Testnet contract to enable gas fee claims (as part of sequencer revenue sharing of this protocol). After upgrading the contract to this version, anyone can call the newly added function to enable the gas fee sharing. A further contract upgrade can add functionality to withdraw the accrued gas fees.

Implementation Plan:

Proposal: 5GGkNtonJWQ9pKCRrpfjeiKSBYnU9ASUhWHisr6BtxfJ

Code changes:

branch: entropy_blast (the blast gas claim code is not merged into main because it’s a one-off that doesn’t fit in the generic smart contract)


  1. Make sure you node-js and forge installed.
    a. node-js: install nvm from here
    b. forge: install it from here
  2. Clone pyth-crosschain repo
  3. Checkout the proposal code branch
  4. Run the following command from the root dir: npm ci && npx lerna run build
  5. Get the on-chain implementation code digest by going to the contract_manager directory and running this command: npx ts-node scripts/check_proposal.ts --cluster mainnet-beta --proposal <proposal id>
  6. Get the source code digest by going to the target_chains/ethereum/contracts and running npx truffle compile --all && cat build/contracts/EntropyUpgradable.json | jq -r .deployedBytecode | tr -d '\n' | cast keccak
  7. Match the of the on-chain digest with the source code digest.

Blast making you double-handle things RN hahahah. Both PIPs are good :blush: