metadata: {"signature": "0xec717c380c6cc89e718ba68bbaa7956538b76c6d890d12dd77b36189caed1b860c8c7c7a12488c7feba7d438e82163a3fdf22d2c5aa129add207ad61b2ca8e9b1b", "application": {"round": "0xd2d99614321becd7cd0636715bbb4c94968e6271", "answers": [{"type": "email", "hidden": true, "question": "Email Address", "questionId": 0, "encryptedAnswer": {"ciphertext": "EX9yelXQf31QDTg0USbCtlZKK+DgNWQjaEDrXr8KBuM=", "encryptedSymmetricKey": "12ac8c661b058abb539693170be5419f7ba123baa49883b6f8f2854b4e299415352b4ce49cb61797240c2073687cc701e67d02082002818cb7a68d7d932a9ee1932d76c8faa66d40ad27833050c1d13d02249462ba1a9c3e0bf57230e855a8832405e86dc510a777a16c7969238165ac21abc1f9c02e153f4de30771cfaa0bb50000000000000020d818276f95ad8f1136230e0b83fd695b9df714730d15ef1a5644363f05c4339225172faa554019ea36b78eebcfb477a6"}}, {"type": "short-answer", "answer": "adraffy", "hidden": true, "question": "Telegram Handle", "questionId": 1}, {"type": "short-answer", "answer": "https://github.com/adraffy/blocksmith.js", "hidden": true, "question": "Project GitHub Repo", "questionId": 2}, {"type": "short-answer", "hidden": true, "question": "Link to your Public Group Chat", "questionId": 3}, {"type": "short-answer", "answer": "ENS Identity 2024", "hidden": true, "question": "Have you participated in a previous Gitcoin Grants Round? If so, please name the rounds or link the builder profile associated with previous rounds.", "questionId": 4}, {"type": "paragraph", "answer": "Javascript Scripting of Foundry Forge/Anvil\nThink Zero-config Hardhat", "hidden": true, "question": "Provide a brief overview of your tool, library, or framework. What specific problem or inefficiency in the development process does it address?", "questionId": 5}, {"type": "paragraph", "answer": "Blocksmith allows full end-to-end testing of situations that are too complex for a single-contract foundry tests using vm.prank()-like features.", "hidden": true, "question": "How does your project reduce development barriers, improve efficiency, or enhance the security of Web3 projects? Please provide specific examples or metrics if available.", "questionId": 6}, {"type": "paragraph", "answer": "Primary test framework used by https://github.com/unruggable-labs/unruggable-gateways", "hidden": true, "question": "Describe the current usage and support for your tool within the developer community. This could include GitHub stars, downloads, or testimonials from developers.", "questionId": 7}, {"type": "paragraph", "answer": "Funds will be used to further development.  Primary areas include: adding real network deployment features and adding documentation and more examples.", "hidden": true, "question": "Outline your project's roadmap and how the grant funds will be used to achieve your development goals.", "questionId": 8}, {"type": "paragraph", "hidden": true, "question": "For any project deploying smart contracts on blockchain networks, please list all your deployer addresses and their corresponding blockchain networks. Use this format for each entry: [deployer_address], [chain_id]\u2014for example, 0x123abc..., 42161 (This represents a deployer address on the Arbitrum network). Please include a separate line for each unique deployer address and blockchain combination.", "questionId": 9}], "project": {"id": "0xf1082b71aa913e5749b81b0c1f9c0be7fc94b60c1d34a9d668575a0b141e59e6", "title": "blocksmith.js", "logoImg": "bafkreieh6qqxw5spofomongnyscvcxn2o6a3rdcjf5cnusoojl5g7ztonq", "metaPtr": {"pointer": "bafkreifb5zgggfdbrknuuvnxz54rfuv4m3vvix3hizpofontgey5um7xlm", "protocol": "undefined"}, "website": "https://github.com/adraffy/blocksmith.js", "bannerImg": "bafkreiaotati3capwhwfpbem7gxuh5qwtatwwk674iwqwdffrjb5gjstwy", "createdAt": 1713295313949, "userGithub": "adraffy", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..XCYeoaTjZImW_OOmm1BLJbNxSiEOq7Tr8dube2II8BMQtUMy3ulwpAGdYts_imk4kENSJKtTqiytuWvru9R1Bg", "type": "Ed25519Signature2018", "created": "2024-10-23T21:37:44.741Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2024-10-23T21:37:44.741Z", "expirationDate": "2025-01-21T21:37:44.741Z", "credentialSubject": {"id": "did:pkh:eip155:1:0x51050ec063d393217B436747617aD1C2285Aeeee", "hash": "v0.0.0:EikOD6PEK0oUaFrJ3WtLpvgsHAhQkxQTYam+UaJF/ZU=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextGithubOrg#adraffy-org#225900"}}, "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, "projectGithub": "adraffy-org", "projectTwitter": "adraffy"}, "recipient": "0x51050ec063d393217B436747617aD1C2285Aeeee"}}