Skip to content

Instantly share code, notes, and snippets.

@danfinlay
danfinlay / snaps-ui-docs.md
Created March 18, 2025 20:38
MetaMask Snaps Internal UI Generating API Documentation

MetaMask Snaps JSON-RPC UI API Documentation

This documentation covers the JSON-RPC methods provided by the SnapInterfaceController for generating user interfaces in MetaMask Snaps.

Overview

The MetaMask Snaps platform provides a JSON-RPC API for Snaps (third-party extensions) to create and interact with user interfaces within the MetaMask environment. These interfaces allow Snaps to display information, collect user input, and provide interactive experiences without requiring direct DOM access.

Available Methods

@danfinlay
danfinlay / event-resources.md
Created June 16, 2023 15:37
Here are some resources you can use when listing me on your event page

Dan Finlay Event Resources

Here are some resources you can use when listing me on your event page:

Avatar

avatar

Bio

@danfinlay
danfinlay / capped_wisps.md
Last active April 13, 2020 21:04
Capped Wisp Account
  • Goal:
    • An [[Ethereum]] smart account architecture composed from a very small and simple pattern of flexible delegation with maximally off-chain, low-state contracts.
  • Axioms / Dependencies / Prior Art / Prerequisites & Tools
    • [[gnosis-safe style module]]s
      • Each module can call any function on the parent contract.
    • [[create2]] deterministic addressing
      • Account can delegate to unpublished contracts.
    • [[Will-o-wisps]]
  • Stateless delegations can clean themselves up, leaving no state-bloat on-chain.
@danfinlay
danfinlay / eth_raw_sign.md
Created March 9, 2020 19:17
Low level signing method roadmap
  • low-level signing method
    • Things that need to be done
      • Consider this kind of raw signing from security. Ask [[Christian Lundkvist]]
      • Consider drafting an EIP for this, so it can get broader security consideration.
    • Code that would need to be changed
  • MetaMask Controller
@danfinlay
danfinlay / map-func-identity.js
Created November 21, 2019 19:40
Proof that JavaScript maps index functions by identity, not source string.
const funcString = '() => "foo"';
const funcA = new Function(funcString);
const funcB = new Function(funcString);
const map = new Map();
map.set(funcA, 'a');
map.set(funcB, 'b');
const aVal = map.get(funcA);
console.log(aVal === 'a');
did:muport:QmRirsVfbq9KhAYjrTeWKBcEyTaJ6LLtjLBQkJX2cGwjQo
@danfinlay
danfinlay / signTypedData_testCases.md
Created August 30, 2019 18:01
signTypedData test cases

signTypedData Test Cases

signTypedData_v1 (aka signTypedData in the MetaMask provider)

  • privKey: 4af1bceebf7f3634ec3cff8a2c38e51178d5d4ce585c52d6043e5e2cc3418bb0
  • param: [ { type: 'string', name: 'message', value: 'Hi, Alice!' } ]
  • signature: 0x49e75d475d767de7fcc67f521e0d86590723d872e6111e51c393e8c1e2f21d032dfaf5833af158915f035db6af4f37bf2d5d29781cd81f28a44c5cb4b9d241531b

signTypedData_v3 (aka EIP 712 spec, aka ethSigUtil.signTypedData for bad reasons)

@danfinlay
danfinlay / request-perms.js
Last active August 8, 2019 19:14
json-rpc-capabilities-middleware example usage via MetaMask
const requestedPermissions = {
eth_accounts: {},
eth_sendTransaction: {},
eth_decrypt: {},
};
async function main () {
const provider = window.ethereum
await provider.enable({ requestedPermissions });
await provider.send({ method: 'eth_sendTransaction', parameters:[{ to: me, value: aModestSum }] });
@danfinlay
danfinlay / pge-logic.csv
Created November 15, 2018 16:53
A pros-cons table to performing preventative maintenance for a corporation.
Do maintenance Pocket money
Get paid less Get paid more
Maybe prevent someone else's fire Aw it won't happen!
Your civic duty Worst case scenario the company goes under! you'll be fine.
@danfinlay
danfinlay / plugin.js
Created October 5, 2018 04:40
Quick mockup for a simple plugin system
console.log('plugin loaded!')
window.parent.postMessage('PLUGIN ping', '*', false)
window.addEventListener('message', function (e) {
console.log('PLUGIN RECEIVED', e )
window.parent.postMessage('PLUGIN pong', '*', false)
})