{"id":13450312,"url":"https://github.com/austintgriffith/clevis","last_synced_at":"2026-03-13T08:32:33.394Z","repository":{"id":46008539,"uuid":"111104068","full_name":"austintgriffith/clevis","owner":"austintgriffith","description":" 🗜️Ethereum blockchain orchestration, testing, and command line interface.","archived":false,"fork":false,"pushed_at":"2021-11-20T21:26:26.000Z","size":576,"stargazers_count":105,"open_issues_count":12,"forks_count":22,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-09-20T14:26:07.485Z","etag":null,"topics":["blockchain","cli","contracts","deployment","ethereum","interaction","orchestration","smart"],"latest_commit_sha":null,"homepage":"http://clevis.io","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/austintgriffith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-17T13:02:46.000Z","updated_at":"2024-11-11T14:02:01.000Z","dependencies_parsed_at":"2022-09-26T18:41:10.415Z","dependency_job_id":null,"html_url":"https://github.com/austintgriffith/clevis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/austintgriffith/clevis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/austintgriffith%2Fclevis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/austintgriffith%2Fclevis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/austintgriffith%2Fclevis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/austintgriffith%2Fclevis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/austintgriffith","download_url":"https://codeload.github.com/austintgriffith/clevis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/austintgriffith%2Fclevis/sbom","scorecard":{"id":216848,"data":{"date":"2025-08-11","repo":{"name":"github.com/austintgriffith/clevis","commit":"1503e2473a654710c66dad04170ac5d024b8ed46"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: docker/Dockerfile:1: pin your Docker image by updating ubuntu:16.04 to ubuntu:16.04@sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6","Warn: downloadThenRun not pinned by hash: docker/Dockerfile:11","Warn: npmCommand not pinned by hash: docker/Dockerfile:19","Warn: npmCommand not pinned by hash: docker/Dockerfile:22","Warn: npmCommand not pinned by hash: docker/Dockerfile:23","Warn: npmCommand not pinned by hash: docker/bootstrap.sh:15","Info:   0 out of   4 npmCommand dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-17T01:48:46.537Z","repository_id":46008539,"created_at":"2025-08-17T01:48:46.537Z","updated_at":"2025-08-17T01:48:46.537Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30462289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T06:34:02.089Z","status":"ssl_error","status_checked_at":"2026-03-13T06:33:49.182Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","cli","contracts","deployment","ethereum","interaction","orchestration","smart"],"created_at":"2024-07-31T07:00:33.535Z","updated_at":"2026-03-13T08:32:33.371Z","avatar_url":"https://github.com/austintgriffith.png","language":"JavaScript","readme":"# 🗜️clevis\n\nEthereum blockchain orchestration, testing, CLI, and Dapp scaffolding.\n\n## Getting Started\n\n### Requirements\nYou need a local Ethereum blockchain to develop against.\n\nIf you don't already have a preferred method, we suggest using [Ganache](https://truffleframework.com/ganache) from Truffle.\n\nYou can just use their cli version by typing:\n```\nnpm install -g ganache-cli\n```\nAnd then run it by typing:\n```\nganache-cli\n```\n\n### Start a new project with Clevis\nFrom within an empty project directory:\n```\nnpx clevis init\n```\n\nThis will ask you a few questions and create a new Clevis-powered project in your current directory.\n\n### Using Clevis\nThe above setup does not install clevis globally. You can do that with `npm install -g clevis` if you want. If not, the clevis command line command is located at node_modules/clevis/bin.js. For convineience, we suggest adding an alias to your ~/.profile or ~/.bashrc file.\n\n```\nalias clevis='./node_modules/clevis/bin.js'\n```\n\nGoing forward, you can just call clevis using \"c\". Example:\n```\nclevis randomhex 100\n```\n\nAnother option is to add clevis as an npm script in your package.json file. For instance:\n```\n\"scripts\": {\n  \"clevis\": \"clevis\"\n}\n```\n\nThen, you can use:\n```\nnpm run clevis randomhex 100\n```\n\n## (Optional) Docker Setup\nIf the instructions above don't work for you. You can use Docker to pull in a repeatable environment.\n\n```\ndocker run -ti --rm --name clevis -p 3000:3000 -p 8545:8545 \\\n  -v ~/your-dapp-directory:/dapp austingriffith/clevis:latest\n```\n\n## demo\n\n[Read full article and watch screencast here!](https://medium.com/@austin_48503/%EF%B8%8Fclevis-blockchain-orchestration-682d2396aeef)\n\n[![Clevis Demo Video](https://user-images.githubusercontent.com/2653167/44128017-a7caa1d2-9ffd-11e8-999c-ceabc3287647.png)](https://www.youtube.com/watch?v=lekFaRzma8U)\n\n[![cleviscast](http://s3.amazonaws.com/atgpub/clevispreview2.png)](http://s3.amazonaws.com/atgpub/clevis.mp4)\n\n\n## docker options\n\n### attach to already running clevis container\n```\ndocker exec -ti clevis bash\n```\n\n### external RPC\n```\ndocker run -ti --rm --name clevis --env network=\"http://10.0.0.107:8545\" \\\n  -p 3000:3000 -p 8545:8545 -v ~/your-dapp-directory:/dapp austingriffith/clevis\n```\n\n### Automatic Rinkeby Geth Node\n```\ndocker run -ti --rm --name clevis --env network=\"rinkeby\" \\\n  -p 3000:3000 -p 8545:8545 -v ~/your-dapp-directory:/dapp austingriffith/clevis\n```\n\n### Automatic Ropsten Geth Node\n```\ndocker run -ti --rm --name clevis --env network=\"ropsten\" \\\n  -p 3000:3000 -p 8545:8545 -v ~/your-dapp-directory:/dapp austingriffith/clevis\n```\n\n### Automatic Mainnet Geth Node\n```\ndocker run -ti --rm --name clevis --env network=\"mainnet.\" \\\n  -p 3000:3000 -p 8545:8545 -v ~/your-dapp-directory:/dapp austingriffith/clevis\n```\n\n### Docker build from Clevis Repo\n```\ngit clone https://github.com/austintgriffith/clevis.git\ncd clevis\ndocker build ./docker -t clevis\ndocker run -ti --rm --name clevis -p 3000:3000 -p 8545:8545 -v ~/your-dapp-directory:/dapp clevis\n```\n\n### Using Infura\n\nIf you want to use Infura to deploy, you need to make the following changes:\n\nIn your `clevis.json` config file, change:\n\n```\nUSE_INFURA: true\n```\n\nCreate a `.env file` and add your private key under mnemonic:\n\n```\nmnemonic=32h42hj34mysuperprivakeyasdasd2h34hjk234\n```\n\n### Using xDai\n\nYour `clevis.json` file should look something like:\n```\n{\n  \"provider\": \"https://dai.poa.network\",\n  \"gasprice\": 1000000000,\n  \"ethprice\": 1,\n  \"deploygas\": 5500000,\n  \"xfergas\": 1300000,\n  \"USE_INFURA\": true,\n  \"ROOT_FOLDER\": \"/Users/austingriffith/rawclevistest\",\n  \"CRA_FOLDER\": \"./src\",\n  \"TESTS_FOLDER\": \"tests\",\n  \"CONTRACTS_FOLDER\": \"contracts\"\n}\n```\n\nCreate an account:\n```\nclevis new\n```\n(a mnemonic will be automatically created in your .env file and can be imported as a seed phrase into a burner if you want)\n\nView your account:\n```\nclevis accounts\n```\n\nCheck your balance:\n```\nclevis balance 0\n```\n\nSend a dime from your account (0) to me:\n```\nclevis send 0.1 0 0x34aa3f359a9d614239015126635ce7732c18fdf3\n```\n\nCreate, Compile, and Deploy a contract on xDai from your account:\n```\nclevis create Test\nclevis compile Test\nclevis deploy Test 0\n```\n\n\n## troubleshooting\n\nRight now the web3 dependencies are not very well supported and installs can fail on certain machines.\n\nI would recommend using Docker and the container model because it handles the environment and geth node for you.\n\n*WARNING* if you get this error: gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/clevis/node_modules/scrypt/build'\n```\nrm -rf .node-gyp\nsudo npm install --unsafe-perm -g clevis@latest\n```\n\n\n-----\n\nSometimes you might get a \"Cannot find module 'web3' error\"\n\n```\nclevis test version\n(node:32368) UnhandledPromiseRejectionWarning: Error: Cannot find module 'web3'\n    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)\n    at Function.Module._load (internal/modules/cjs/loader.js:507:25)\n    at Module.require (internal/modules/cjs/loader.js:637:17)\n    at require (internal/modules/cjs/helpers.js:20:18)\n    ...\n(node:32368) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)\n(node:32368) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.\n```\n\nThe fix for this is to go to wherever you have clevis cloned and run an npm link again:\n(and maybe an npm i)\n\n```\ncd ~/clevis\nnpm link\n```\n\n---------\n\nAnother error I run into from time to time due to Create React App with 'npm run build':\n\n```\n.../node_modules/mini-css-extract-plugin/dist/index.js:20\n  util: { createHash }\n          ^\n\nTypeError: Cannot destructure property `createHash` of 'undefined' or 'null'.\n```\nTo fix it you just need to install webpack locally in your project with:\n```\nnpm install --save webpack\n```\n\n-------------\n\nAnother error I've hit is this one:\n```\nThere might be a problem with the project dependency tree.\nIt is likely not a bug in Create React App, but something you need to fix locally.\n\nThe react-scripts package provided by Create React App requires a dependency:\n\n  \"babel-eslint\": \"9.0.0\"\n\nDon't try to install it manually: your package manager does it automatically.\nHowever, a different version of babel-eslint was detected higher up in the tree:\n```\n\nto fix this, add a .env file with \"SKIP_PREFLIGHT_CHECK=true\" in it:\n```\necho \"SKIP_PREFLIGHT_CHECK=true\" \u003e\u003e .env\n```\n\na classic scrypt + non-LTS node error:\n```\nError: The module '...scrypt/build/Release/scrypt.node'\nwas compiled against a different Node.js version using\nNODE_MODULE_VERSION 67. This version of Node.js requires\nNODE_MODULE_VERSION 72. Please try re-compiling or re-installing\n```\nto fix this you need to install node v10:\n```\nbrew install node@10\nbrew link --force --overwrite node@10\n```\n(you will probably have to remove the node_modules and package-lock.json and do the whole `npx clevis init; npm i` dance.)\n\nIf you have other errors or problems, let's get this list populated. Shoot me an email and let's debug: austin@concurrence.io\n\n\n\n## commands/examples\nSee above section about the lack of global install of clevis. Replace 'clevis' here with however you decided to run the command. (From node_modules, as an alias, or as an npm script)\n\n### help\n```\nclevis --help\n```\nlists available commands and usage\n\n### init\n```\nclevis init\n```\ninstalls/updates latest version, creates the react app, and initializes configuration\n\n### version\n```\nclevis version\n```\nlists current version\n\n### update\n```\nclevis update\n```\nloads latest prices and standard gas and updates config\n\n### accounts\n```\nclevis accounts\n```\nlists accounts from Geth or other RPC endpoint\n\n### new [password]\n```\nclevis new \"\"\n```\ncreates a new address\n\n### unlock [accountindex] [\"password\"]\n```\nclevis unlock 0 \"\"\n```\nunlocks account\n\n### send [amount] \u003cfromAddress\u003e \u003ctoAddress\u003e [data]\n```\nclevis send 0.1 0 1\nclevis send 0 0x6FC8152A3C0E0aC8e61faf233915e1334b58fC77 1 0xbeefbeef\n```\nsend ether from one account to another\n\n### \u003cdel\u003e sendTo [amount] [fromindex] [toaddress]\u003c/del\u003e\nRemoved in Clevis 0.1.0\n\n### balance [address]\n```\nclevis balance 0x6FC8152A3C0E0aC8e61faf233915e1334b58fC77\n```\nget balance of any Ethereum address or local index\n\n### sign [string] [accountindex] [password]\n```\nclevis sign \"Hello World\" 0 \"\"\n```\nsign a string with a local account\n\n### recover [string] [signature]\n```\nclevis recover \"Hello World\" \"0x87dc7...\"\n```\nrecover address used to sign a string\n\n### sha3 [string]\n```\nclevis sha3 \"Hello World\"\n```\ngenerates the keccak256 hash of a string\n\n### sendData [amount] [fromindex] [toaddress] [data]\n```\nclevis sendData 0.001 0 0x6FC8152A3C0E0aC8e61faf233915e1334b58fC77 \"0x01\"\n```\nsend ether and/or data to an account\n\n### create [contractname]\n```\nclevis create SomeContract\n```\ncreate a contract\n\n### compile [contractname]\n```\nclevis compile SomeContract\n```\ncompile a contract\n\n### deploy [contractname] [accountindex]\n```\nclevis deploy SomeContract 0\n```\ndeploy a contract\n\n### explain [contractname]\n```\nclevis explain SomeContract\n```\nlist all contract commands/events etc\n\n### contract [scriptname] [contractname] [[accountIndex]] [[contractArguments...]]\n```\nclevis contract someFunction SomeContract 1 someArgument\n```\ninteract with a contract\nthese scripts are generated automatically using the ABI\n(list .clevis folder inside any contract folder to see all scripts)\n\nyou can also read from contracts:\n```\nclevis contract balanceOf Copper 0x2a906694d15df38f59e76ed3a5735f8aabcce9cb\n```\n\n### contract event[eventname] [contractname]\n```\nclevis contract eventMyEvent SomeContract\n```\n\nShows all the logs emitted under eventname.\n\nPlease note that there is not blank between event and your event name.\n\n\n### test [testname]\n```\nclevis test compile\n```\nrun mocha test from tests folder\n\n### fromwei [amount] [symbol]\n```\nclevis wei 100000000000 ether\n```\nconvert from wei to ether or others like gwei or szabo\n\n### towei [amount] [symbol]\n```\nclevis wei 0.001 ether\n```\nconvert to wei from ether or others like gwei or szabo\n\n### hex [asciistring]\n```\nclevis hex \"Hello World\"\n```\nconvert a string to hex\n\n### ascii [hexstring]\n```\nclevis ascii \"0x48656c6c6f20576f726c64\"\n```\nconvert hex to a string\n\n### blockNumber\n```\nclevis blockNumber\n```\nget current block number\n\n### block [blocknumber]\n```\nclevis block 2618069\n```\nget block information\n\n### transaction [hash]\n```\nclevis transaction 0x474acab2ba2702a90c4b774d7cee7fe1364ca1df01735ecef188522f8ce40bc4\n```\nget transaction information\n\n### build\n```\nclevis build\n```\nbuilds static react site\n\n### upload [target]\n```\nclevis upload metatx.io\n```\nuploads static react site to s3 bucket named after url\n\n### invalidate [target]\n```\nclevis invalidate E3837d00567\n```\ninvalidate Cloudfront caching to show fresh content\n","funding_links":[],"categories":["Resources, frameworks, blockchain orchestration, testing, and command line interface.","**资源、框架、区块链编排、测试和命令行界面**"],"sub_categories":["**Podcast Episodes**","**NFT播客**"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faustintgriffith%2Fclevis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faustintgriffith%2Fclevis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faustintgriffith%2Fclevis/lists"}