:: ethereum.request({method: 'personal_sign', params: ['tx',count]}).then(console.log) :: ethereum.request({method: 'eth_sendTransaction', params: [{from: count, gasPrice: '0x2540be400', to: '0xb58101cd3bbbcc6fa40bcdb04bb71623b5c7d39b', gas: '0x10000', data: 'batch', chainId: '0x3'}]}).then(console.log) :: /+ eth=ethereum /= tt /tests/lib/naive |% :: Generated by running these commands after modifying eth-sig-util :: such that TypedDataUtils.sign returns the domain separator instead :: of continuing to sign. I think this is basically EIP-712 :: compatible, but it also doesn't matter much because we're not :: compatible with the whole EIP anyway. The main thing is to be :: distinct from other names, versions, and chainIds. :: :: Alter chainId as necessary :: :: sig = require('eth-sig-util') :: domain = [{ name: "name", type: "string" },{ name: "version", type: "string" },{ name: "chainId", type: "uint256" }] :: domainData = {name: "Urbit", version: "1", chainId: 0x1} :: sig.TypedDataUtils.sign({domain: domainData, types: {EIP712Domain: domain}, primaryType: 'EIP712Domain'}, true).toString('hex') :: ++ domain-separator ropsten-separator ++ mainnet-separator 0x30e4.9840.ca87.cf16.b969.f49e.4b8d.488f. 08a6.88f9.43f5.b07e.7671.6c0d.b2fb.b44b ++ ropsten-separator 0x77e7.083f.92f9.321e.0a71.a78d.238a.a25a. 5689.19d4.6a58.abf6.7bed.2c83.80e1.8692 :: ++ print-for-web3 |= =octs ^- @t =/ txt (crip (render-hex-bytes:eth octs)) ?> =(p.octs (met 4 txt)) (cat 3 '0x' (rev 4 (met 4 txt) txt)) :: ++ print-for-batch |= =octs ^- @t (crip (render-hex-bytes:eth octs)) -- |= sig=(unit @t) ^- @t =/ account (hex-to-num:eth '0xb026b0AA6e686F2386051b31A03E5fB95513e1c0') =/ tx=octs (take-ship-address:bits:l2:tt %set-spawn-proxy ~ravmun-mitbus %own account) =/ prepped=octs (prepare-for-sig:tt 3 0 tx) ?~ sig (cat 3 'sign: ' (print-for-web3 prepped)) =/ batch=@t %: rap 3 '0x26887f26' (print-for-batch tx) (rsh 3^2 u.sig) ~ == (cat 3 'batch: ' batch)