metadata: {"signature": "0x826448956888ed6778d0854b0cef0995d38f664a97594d81e3bc2eba86014b60496a840935b74a83e8dff933e9307e1038603cb78615bf13cf87ef8a7ae74ad71c", "application": {"round": "0x9c239f3317c6df0b4b381b965617162312dc8caa", "answers": [{"type": "email", "hidden": true, "question": "Email Address", "questionId": 0, "encryptedAnswer": {"ciphertext": "AWwWy8clzDwjfL1jcwulAdjgwPaN+WsWoFpq1Sa94ck=", "encryptedSymmetricKey": "56a3cd8ef9c6376102f613fd8d27d3f08f9a23448ab83b8aaf0ffd6aff2785696f17a9d9a1661223ac2b9c9aa6527213efd1c15d82cb70ae89bf25377c6df0c69b27640dee1f9b41f4bb752505eb2cfef6666b58f275ad68f67187c129f4d6a6eb1bf550ff4310cfb9b7f047a3cde34f566060d50f09871f8b08a54f06af1f1a0000000000000020e29c197b1046b547830fac730a674abd1069d32e62a6a537e96751ccffe8e532223957e71d82242ce577e895d7e397b3"}}], "project": {"id": "0xf1082b71aa913e5749b81b0c1f9c0be7fc94b60c1d34a9d668575a0b141e59e6", "title": "blocksmith.js", "logoImg": "bafkreieh6qqxw5spofomongnyscvcxn2o6a3rdcjf5cnusoojl5g7ztonq", "metaPtr": {"pointer": "bafkreieeh7kn6chewxme6k3vnquj6ehxfyeyrhwsm4bet2ivzzn5twhbzq", "protocol": "undefined"}, "website": "https://github.com/adraffy/blocksmith.js", "bannerImg": "bafkreiaotati3capwhwfpbem7gxuh5qwtatwwk674iwqwdffrjb5gjstwy", "createdAt": 1713295313949, "userGithub": "adraffy", "credentials": {"twitter": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..6PovvtbhP2SlDAFmKfyPmKDqozyooIr9bOro4xveL_iQ6a22C1R_4ROiBtmSBWDGUroZKCrFQpnapZQKtLRwDQ", "type": "Ed25519Signature2018", "created": "2024-04-16T19:21:24.857Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2024-04-16T19:21:24.857Z", "expirationDate": "2024-07-15T19:21:24.857Z", "credentialSubject": {"id": "did:pkh:eip155:1:0x51050ec063d393217B436747617aD1C2285Aeeee", "hash": "v0.0.0:AJx770QpmnmSguwLbHG5gOSDS1ao/sG+GOjrGK1jV3E=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextTwitter#adraffy"}}}, "description": "blocksmith.js is a minimal Javascript testing framework for Ethereum contract development using foundry-rs and ethers. Foundry is great speed-wise but writing tests in Solidity is a disaster and the command-line interface is bad for complex operations. Hardhat is slow, has way too much boilerplate, interacts poorly with modern ESM. Both projects are very \"do it our way\". The result is that many contracts don't have tests, and the tests that exist aren't end-to-end. \n\nOTOH, blocksmith.js is simple. It gives you a lightweight wrapper around `forge` and `anvil`, so you can script Foundry however you want. You can use any async JS testing framework, including the default nodejs test runner, or just write simple JS scripts that glue anything you want together. \n\nTo properly test an ENS contract with CCIP-Read, you need to deploy a lot of infrastructure: a registry, a resolver, some names, a CCIP-server, and then test all of the interactions. blocksmith.js makes this trivial.\n\nAt the moment, you can `npm i @adraffy/blocksmith`. I'd like to write tests for more contracts to illustrate how to use blocksmith. This is also an useful learning experience as I get to figure out what features I'm missing or what needs improved. This should expand the feature set and improve ergonomics. \n\nI'd like to explore making end-to-end tests for cross-chain communication so developers can locally simulate things like EVM gateway and other ideas. Running parallel testnets is blocksmith.js is effortless and I see a lot of value in cross-chain tests that can be described in a single JS file. ", "lastUpdated": 0, "projectTwitter": "adraffy"}, "recipient": "0x51050ec063d393217B436747617aD1C2285Aeeee"}}