{"id":30657982,"url":"https://github.com/cmingxu/wallet-keeper","last_synced_at":"2025-10-14T00:41:32.144Z","repository":{"id":57487921,"uuid":"179079511","full_name":"cmingxu/wallet-keeper","owner":"cmingxu","description":"Simplified access to BTC/OmniProtocol/ETH backend with unified APIs.","archived":false,"fork":false,"pushed_at":"2019-05-10T14:34:57.000Z","size":206,"stargazers_count":34,"open_issues_count":1,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-31T11:25:07.689Z","etag":null,"topics":["bitcoind","btc","ominilayer","usdt","wallet"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cmingxu.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":"2019-04-02T13:05:05.000Z","updated_at":"2024-11-05T13:47:11.000Z","dependencies_parsed_at":"2022-08-29T13:30:53.204Z","dependency_job_id":null,"html_url":"https://github.com/cmingxu/wallet-keeper","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cmingxu/wallet-keeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmingxu%2Fwallet-keeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmingxu%2Fwallet-keeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmingxu%2Fwallet-keeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmingxu%2Fwallet-keeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cmingxu","download_url":"https://codeload.github.com/cmingxu/wallet-keeper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cmingxu%2Fwallet-keeper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017363,"owners_count":26086052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bitcoind","btc","ominilayer","usdt","wallet"],"created_at":"2025-08-31T11:18:38.943Z","updated_at":"2025-10-14T00:41:32.124Z","avatar_url":"https://github.com/cmingxu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **Wallet Keeper**\n\n\u003cimg src=\"./logo/logo.png\" width=\"100\"\u003e\n\n----\n\nsimplified access to BTC/OmniProtocol/ETH backends with unified APIs, help cryptocurrency developers focus their bussiness logic instead of RPC details of different backend.\n\n**Notice**: currently under *heavy development*.\n\n[![version](https://img.shields.io/badge/version-0.2.0-yellow.svg)](https://semver.org)\n\n## Run\n```bash\n$ make\n$ ./bin/wallet-keeper --log-level debug --log-dir=/tmp/  \\\nrun --http-listen-addr=http://0.0.0.0:8080\n```\n\n## Docker Run\n```bash\n$ ./scripts/build.sh\n$ ./scripts/run_wallet_keeper_docker.sh\n```\n\n\n## How to config\n\n```bash\n$ ./bin/wallet-keeper \nuse stdout as default log output\nNAME:\n   Universal BTC/USDT wallet gateway - A new cli application\n\nUSAGE:\n   wallet-keeper [global options] command [command options] [arguments...]\n\nVERSION:\n   0.2.0\n\nCOMMANDS:\n     run, r   serve api gateway\n     help, h  Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --log-level value  default log level (default: \"info\") [$LOG_LEVEL]\n   --log-dir value     [$LOG_DIR]\n   --env value        (default: \"production\") [$ENV]\n   --help, -h         show help\n   --version, -v      print the version\n\n$ ./bin/wallet-keeper run --help\nuse stdout as default log output\nNAME:\n   wallet-keeper run - serve api gateway\n\nUSAGE:\n   wallet-keeper run [command options] [arguments...]\n\nOPTIONS:\n   --http-listen-addr value  http address of web application (default: \"0.0.0.0:8000\") [$HTTP_LISTEN_ADDR]\n   --btc-rpc-addr value      [NOTICE] testnet and mainnet have different default port (default: \"192.168.0.101:8332\") [$BTC_RPCADDR]\n   --btc-rpc-user value      (default: \"foo\") [$BTC_RPCUSER]\n   --btc-rpc-pass value      password can be generate through scripts/rcpauth.py (default: \"qDDZdeQ5vw9XXFeVnXT4PZ--tGN2xNjjR4nrtyszZx0=\") [$BTC_PRCPASS]\n   --usdt-rpc-addr value     [NOTICE] testnet and mainnet have different default port (default: \"localhost:18332\") [$USDT_RPCADDR]\n   --usdt-rpc-user value     (default: \"foo\") [$USDT_RPCUSER]\n   --usdt-rpc-pass value     password can be generate through scripts/rcpauth.py (default: \"usdtpass\") [$USDT_PRCPASS]\n   --usdt-property-id value  property id of usdt, default is 2 (default: 2) [$USDT_PROPERTY_ID]\n   --eth-rpc-addr value      (default: \"http://192.168.0.101:8545\") [$ETH_RPCADDR]\n   --eth-wallet-dir value    (default: \"/data/eth-wallet\") [$ETH_WALLET_DIR]\n   --eth-account-path value  (default: \"/data/eth-accounts.json\") [$ETH_ACCOUNT_PATH]\n   --backends value          (default: \"btc,usdt,eth\") [$BACKENDS]\n```\n\n\n\n## BTC - bitcored\n\n### getblockcount\n\n```bash\n$ curl -sSL -H \"CoinType:btc\" localhost:8000/getblockcount |  jq .\n{\n  \"message\": \"603443\"\n}\n```\n\n### getaddress\n```bash\n$ curl -sSL -H \"CoinType:btc\" localhost:8000/getaddress?account=barfoox |  jq .\n{\n  \"message\": [\n    \"2MwFt5ZbGfK2yqCWHb1hyGKkm8K6DUByPj8\",\n    \"2N3Mqnjq9KUnLqUNjRdgkqh1VY4DJBjPoie\",\n    \"2N4MbjrKuBD9KYFitz6nmSZFBJxdSWguC7Y\",\n    \"2NDuD1sWwsuZeVdBCv8pusjSQUCNTbJTR7x\"\n  ]\n}\n```\n\n### getnewaddress\n```bash\n$ curl -sSL -H \"CoinType:btc\" localhost:8000/getnewaddress?accounts=barfoox |  jq .\n{\n  \"message\": \"2MwTYicqDegSuR2MsTeRVFLwkhMYSZKHPiP\"\n}\n```\n\n### listaccounts\n```bash\n$ curl -sSL -H \"CoinType:btc\" localhost:8000/listaccounts |  jq .\n{\n  \"message\": {\n    \"barfoo\": 0,\n    \"barfoox\": 0,\n    \"duckduck\": 0,\n    \"foobar\": 0\n  }\n}\n```\n\n### sendtoaddress\n```bash\n$ curl -sSL -H \"CoinType:btc\" 'localhost:8000/sendtoaddress?address=2N2VJhke2sWspswJKWTFjqfibRY1wfZPbEQ\u0026amount=0.1' |  jq .\n{\n  \"message\": \"-6: Insufficient funds\"\n}\n```\n\n### getaddressesbyaccount\n```bash\n$ curl -sSL -H \"CoinType:btc\" 'localhost:8000/getaddressesbyaccount?account=foobar' |  jq .\n{\n  \"message\": [\n    \"2MziFYWKdptgkDn9esKhQnQXt86H6taGM3f\",\n    \"2MziSR87om6fZyknsTMF447Yftt5afQB9GN\",\n    \"2NBEYgwGWTiTaPvCKp64hDeP5xnwckdrYNK\",\n    \"2NGTBdRezf7TNtF3X1ptmWzVr4XWc8MHnnP\"\n  ]\n}\n```\n\n### getaccountinfo\n```bash\n$ curl -sSL -H \"CoinType:btc\" 'localhost:8000/getaccountinfo?account=barfoo' |  jq .\n{\n  \"message\": {\n    \"account\": \"barfoo\",\n    \"balance\": 0.0015,\n    \"addresses\": [\n      \"2Mtb1opq1JvzfdLdGRPFSWwbEmvRGBXYdos\",\n      \"2MxK75vSZLABDgqZRmUPMt6kfyabXZD81SJ\",\n      \"2N5ETGDkhFFZqKQWhcbfYMihv9rSorMQLP9\",\n      \"2ND1nUpT3in3HeMjssd7XkPa3j6nHXQgs1G\"\n    ]\n  }\n}\n```\n\n### createaccount\n```bash\n$ curl -sSL -H \"CoinType:btc\" 'localhost:8000/createaccount?account=barfoo1' |  jq .\n{\n  \"message\": {\n    \"account\": \"barfoo1\",\n    \"balance\": 0,\n    \"addresses\": [\n      \"2N7y28aMq3xfxEZBFDvfvVzQ6aZLXr7np64\"\n    ]\n  }\n}\n```\n\n## USDT - omnicore\n\n### getblockcount\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" localhost:8000/getblockcount |  jq .\n{\n  \"message\": \"1488490\"\n}\n```\n\n\n\n### getaddress\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" localhost:8000/getaddress??account=test |  jq .\n{\n  \"message\": \"mqyY2dscucMNBHAiUid88mEgkvZ3ADJLeZ\"\n}\n```\n\n\n\n### getaddressesbyaccount\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" 'localhost:8000/getaddressesbyaccount?account=test' |  jq .\n{\n  \"message\": [\n    \"mkVW5QARPvvAY328y9LMHep5ZhuiTrgdd4\",\n    \"mvePubvtfpAo18ykLeZ1hD6BMYDismUqxf\"\n  ]\n}\n```\n\n\n\n### getaccountinfo\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" 'localhost:8000/getaccountinfo?account=test' |  jq .\n{\n  \"message\": {\n    \"account\": \"test\",\n    \"balance\": 10,\n    \"addresses\": [\n      \"mkVW5QARPvvAY328y9LMHep5ZhuiTrgdd4\",\n      \"mvePubvtfpAo18ykLeZ1hD6BMYDismUqxf\"\n    ]\n  }\n}\n```\n\n\n\n### move\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" 'localhost:8000/move?from=mvePubvtfpAo18ykLeZ1hD6BMYDismUqxf\u0026to=mkVW5QARPvvAY328y9LMHep5ZhuiTrgdd4\u0026amount=3' |  jq .\n{\n  \"message\": \"success\"\n}\n```\n\n\n\n### sendfrom\n\n```bash\n$ curl -sSL -H \"CoinType:usdt\" 'localhost:8000/sendfrom?from=test\u0026address=mkVW5QARPvvAY328y9LMHep5ZhuiTrgdd4\u0026amount=3' |  jq .\n{\n  \"message\": \"success\"\n}\n```\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmingxu%2Fwallet-keeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcmingxu%2Fwallet-keeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcmingxu%2Fwallet-keeper/lists"}