{"signature": "0x2c89de5daa17dd1de93dd38e46181c1465c80deeb4033c8b8dd94176d49e231562f820d628e19a15ce4eeb98483d2eb046ee4109208c73d854de69a30fdef5441c", "application": {"round": "0xe5B88c67fCd25f0a7BAD6cF7c5A5197e61BFd143", "answers": [{"type": "email", "answer": "raffy@me.com", "hidden": true, "question": "Email Address", "questionId": 0}, {"type": "short-answer", "answer": "adraffy", "hidden": true, "question": "Telegram Handle We Can Use To Contact You", "questionId": 1}, {"type": "paragraph", "answer": "https://github.com/adraffy/blocksmith.js", "hidden": false, "question": "Project GitHub Repo", "questionId": 2}, {"type": "link", "hidden": false, "question": "Link to your Public Group Chat", "questionId": 3}, {"type": "paragraph", "answer": "GG22, GG20+ENS", "hidden": false, "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": "blocksmith.js is a minimal Javascript testing framework for Ethereum contract development using foundry-rs and ethers.  The primary goal of blocksmith.js is to make it simple to write complex tests for EIP-3668 contract interactions.\n", "hidden": false, "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": "EIP-3668 contracts execute over multiple steps and involve interactions with external gateways that produce complex responses with signatures, proofs, and time-checks.  \n\nblocksmith.js makes writing EIP-3668 tests simple.\n\n[Unruggable Gateways](https://github.com/unruggable-labs/unruggable-gateways) is fully-tested using blocksmith.js\n", "hidden": false, "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": "blocksmith.js is used to test [Unruggable Gateways](https://github.com/unruggable-labs/unruggable-gateways) which powers [ENS L2 primary names](https://docs.ens.domains/ensip/19).\n", "hidden": false, "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": "1. add documentation\n1. add more examples\n1. rewrite in TypeScript", "hidden": false, "question": "Outline your project's roadmap and how the grant funds will be used to achieve your development goals.", "questionId": 8}, {"type": "paragraph", "answer": "n/a", "hidden": false, "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]—for 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": "0x2b9be3c545fd71f47c0bc1c17c04baeb8f3d4c350b777b1aeff5a093216e47a3", "title": "blocksmith.js", "logoImg": "bafkreibue6jkvulcebrbjqwpze26amlyqmtvymrnroukqcsun3fgyyds2u", "metaPtr": {"pointer": "bafkreiaiqhssiezityztbgeywqeefxjn7j27aagdyly7pw3ezfu7pex5zu", "protocol": "undefined"}, "website": "https://github.com/adraffy/blocksmith.js", "bannerImg": "bafkreibi4k4e7eclksyvygzh5dxhj5kpwwv3gmlp2ix6euke2l4slxyssi", "createdAt": 1743455116011, "userGithub": "adraffy", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"type": "EthereumEip712Signature2021", "created": "2025-03-31T21:06:21.468Z", "@context": "https://w3id.org/security/suites/eip712sig-2021/v1", "proofValue": "0x032c1afce8e9780695a67bfdcb160b2576a5c74c5d043390e3358fe05fd72d4543ed993e98dce7c99ed47db7283c3942f7b908a0e94f191a74093b4a16e41c4a1c", "eip712Domain": {"types": {"Proof": [{"name": "@context", "type": "string"}, {"name": "created", "type": "string"}, {"name": "proofPurpose", "type": "string"}, {"name": "type", "type": "string"}, {"name": "verificationMethod", "type": "string"}], "@context": [{"name": "nullifiers", "type": "NullifiersContext"}, {"name": "provider", "type": "string"}], "Document": [{"name": "@context", "type": "string[]"}, {"name": "credentialSubject", "type": "CredentialSubject"}, {"name": "expirationDate", "type": "string"}, {"name": "issuanceDate", "type": "string"}, {"name": "issuer", "type": "string"}, {"name": "proof", "type": "Proof"}, {"name": "type", "type": "string[]"}], "EIP712Domain": [{"name": "name", "type": "string"}], "CredentialSubject": [{"name": "@context", "type": "@context"}, {"name": "nullifiers", "type": "string[]"}, {"name": "id", "type": "string"}, {"name": "provider", "type": "string"}], "NullifiersContext": [{"name": "@container", "type": "string"}, {"name": "@type", "type": "string"}]}, "domain": {"name": "VerifiableCredential"}, "primaryType": "Document"}, "proofPurpose": "assertionMethod", "verificationMethod": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb#controller"}, "issuer": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb", "@context": ["https://www.w3.org/2018/credentials/v1", "https://w3id.org/vc/status-list/2021/v1"], "issuanceDate": "2025-03-31T21:06:21.468Z", "expirationDate": "2025-06-29T21:06:21.468Z", "credentialSubject": {"id": "did:pkh:eip155:1:0x51050ec063d393217B436747617aD1C2285Aeeee", "@context": {"provider": "https://schema.org/Text", "nullifiers": {"@type": "https://schema.org/Text", "@container": "@list"}}, "provider": "ClearTextGithubOrg#adraffy-org#225900", "nullifiers": ["v0.0.0:4chVUHgPEmYDBJxUVAowOkKikTp4oqv6QVz4ZD9HmPg="]}}, "twitter": {"type": ["VerifiableCredential"], "proof": {"type": "EthereumEip712Signature2021", "created": "2025-03-31T21:05:00.669Z", "@context": "https://w3id.org/security/suites/eip712sig-2021/v1", "proofValue": "0x50cc95fc987ba7bec41a2e8ebd9ceb95d34673ebd2275df7ff21d4e7a8b0154d128e96e45b91ad765e8771d71e3414af9927f3859adc018c3a9a09e074444b631b", "eip712Domain": {"types": {"Proof": [{"name": "@context", "type": "string"}, {"name": "created", "type": "string"}, {"name": "proofPurpose", "type": "string"}, {"name": "type", "type": "string"}, {"name": "verificationMethod", "type": "string"}], "@context": [{"name": "nullifiers", "type": "NullifiersContext"}, {"name": "provider", "type": "string"}], "Document": [{"name": "@context", "type": "string[]"}, {"name": "credentialSubject", "type": "CredentialSubject"}, {"name": "expirationDate", "type": "string"}, {"name": "issuanceDate", "type": "string"}, {"name": "issuer", "type": "string"}, {"name": "proof", "type": "Proof"}, {"name": "type", "type": "string[]"}], "EIP712Domain": [{"name": "name", "type": "string"}], "CredentialSubject": [{"name": "@context", "type": "@context"}, {"name": "nullifiers", "type": "string[]"}, {"name": "id", "type": "string"}, {"name": "provider", "type": "string"}], "NullifiersContext": [{"name": "@container", "type": "string"}, {"name": "@type", "type": "string"}]}, "domain": {"name": "VerifiableCredential"}, "primaryType": "Document"}, "proofPurpose": "assertionMethod", "verificationMethod": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb#controller"}, "issuer": "did:ethr:0xd6f8d6ca86aa01e551a311d670a0d1bd8577e5fb", "@context": ["https://www.w3.org/2018/credentials/v1", "https://w3id.org/vc/status-list/2021/v1"], "issuanceDate": "2025-03-31T21:05:00.668Z", "expirationDate": "2025-06-29T21:05:00.668Z", "credentialSubject": {"id": "did:pkh:eip155:1:0x51050ec063d393217B436747617aD1C2285Aeeee", "@context": {"provider": "https://schema.org/Text", "nullifiers": {"@type": "https://schema.org/Text", "@container": "@list"}}, "provider": "ClearTextTwitter#adraffy", "nullifiers": ["v0.0.0:R/NNjw9lcP15q/sqjUUXeF45c0C+9Yyrhi5jddcBWZg="]}}}, "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\n[Original Project](https://builder.gitcoin.co/#/chains/8453/registry/0x/projects/0xf1082b71aa913e5749b81b0c1f9c0be7fc94b60c1d34a9d668575a0b141e59e6)", "lastUpdated": 0, "projectGithub": "adraffy-org", "projectTwitter": "adraffy"}, "recipient": "0x51050ec063d393217B436747617aD1C2285Aeeee"}}