{"id":13794209,"url":"https://github.com/AndreiD/arweave-ipfs-bridge","last_synced_at":"2025-05-12T20:31:43.146Z","repository":{"id":50619158,"uuid":"221948574","full_name":"AndreiD/arweave-ipfs-bridge","owner":"AndreiD","description":"a Bridge between IPFS and ARWEAVE","archived":false,"fork":false,"pushed_at":"2019-12-21T16:01:05.000Z","size":17913,"stargazers_count":14,"open_issues_count":0,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-14T04:53:25.099Z","etag":null,"topics":["arweave","arweave-blockchain","bridge","go","ipfs","ipfs-blockchain"],"latest_commit_sha":null,"homepage":"","language":"Go","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/AndreiD.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-11-15T15:14:01.000Z","updated_at":"2024-09-12T17:08:51.000Z","dependencies_parsed_at":"2022-08-28T12:01:24.395Z","dependency_job_id":null,"html_url":"https://github.com/AndreiD/arweave-ipfs-bridge","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiD%2Farweave-ipfs-bridge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiD%2Farweave-ipfs-bridge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiD%2Farweave-ipfs-bridge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AndreiD%2Farweave-ipfs-bridge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AndreiD","download_url":"https://codeload.github.com/AndreiD/arweave-ipfs-bridge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253816776,"owners_count":21968879,"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","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":["arweave","arweave-blockchain","bridge","go","ipfs","ipfs-blockchain"],"created_at":"2024-08-03T23:00:37.236Z","updated_at":"2025-05-12T20:31:38.123Z","avatar_url":"https://github.com/AndreiD.png","language":"Go","funding_links":[],"categories":["Tools ⚙️"],"sub_categories":[],"readme":"# :bridge_at_night: IPFS Arweave Bridge \n\n[![License](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/AndreiD/arweave-ipfs-bridge/blob/master/LICENSE)\n\nA bridge to connect IPFS to Arweave https://www.arweave.org/\n\n\u003cp align=\"center\"\u003e\n  \u003cp align=\"center\"\u003eClick on the image to enlarge it\u003c/p\u003e\n   \u003cimg alt=\"how it looks\" height=\"500\" src=\"https://raw.githubusercontent.com/AndreiD/arweave-ipfs-bridge/master/assets/postman_example.png\"\u003e\n \u003c/p\u003e\n\n### Features\n\n- only couple of requests\n- handles compression / extractions for you (optional)\n- easy to integrated with almost anything (logging, monitoring etc.)\n- no ipfs running in the background needed, no hooverd needed\n\n### How to use it (Ubuntu only)\n\nTested on ubuntu 19.04\n\n- Choose an IPFS gateway to your liking (or create one yourself)\n- If you use Ubuntu, get the binary file **iab**, if not you'll have to build/run it\n- Copy the configuration.json file in the same directory (modify it to your liking)\n- run ./iab  \n- API will run on **http://localhost:5555**\n\n* If you want to use it on other platforms, either use the Dockerfile or build it yourself\n\n### How it does the transfer\n\n##### POST /api/transfer\n\n\u003e example: /api/transfer\n\n\noutput:\n~~~~\n{\n    \"duration\": \"1.145424997s\",\n    \"id\": \"Qq2IE63kxOaZp7laJapQqyu1PUPPktGoSSyKTLI9iP4\",\n    \"payload_bytes\": 14\n}\n~~~~\n\nPOST a raw json body containing\n\n{\n    \"ipfs_hash\": \"THE_IPFS_HASH\",\n    \"use_compression\": BOOLEAN,\n    \"tags\": [\n        {\n            \"key\": \"key1\",\n            \"value\": \"value1\"\n        },...\n    ]\n}\n\nWhere: \n- **hash** the IPFS hash\n- **use_compression** if you want the file compressed before sending it to arweave. (zip is used)\n- **tags** (optional) if you want to add your own tags. (Note: the IPFS-Add tag is added automatically)\n\n\nexample:\n~~~~\n{\n    \"ipfs_hash\": \"Qmc5gCcjYypU7y28oCALwfSvxCBskLuPKWpK4qpterKC7z\",\n    \"use_compression\": false,\n    \"tags\": [\n        {\n            \"key\": \"key1\",\n            \"value\": \"value1\"\n        },\n        {\n            \"key\": \"key2\",\n            \"value\": \"value2\"\n        }\n    ]\n}\n~~~~\n\nresponse:\n- **duration** gives you the time it took to get it from IPFS and to upload it to Arweave\n- **id** represents the arweave transaction id\n- **Attention** The transaction is NOT mined yet. You can get the status of a transaction by calling the API below\n\n(it's up to the user how often they pool for the transaction status)\n\nResponse:\n\n~~~~\n{\n    \"duration\": \"1.145424997s\",\n    \"id\": \"Qq2IE63kxOaZp7laJapQqyu1PUPPktGoSSyKTLI9iP4\",\n    \"payload_bytes\": 14\n}\n~~~~\n\n\n### Docker\n\ncheckout the Dockerfile\n\n~~~~\ndocker build -t iab:1.0 .\ndocker run -p 5555:5555 iab:1.0\n~~~~\n\n### Build it\n\nif you want to build it you need go \u003e= 1.12\nin the root directory run: \n\n~~~~\ngo build -o YOUR_BINARY_NAME\n./YOUR_BINARY_NAME\n~~~~\n\nfor installing go check: https://golang.org/doc/install\nit should build \u0026 run without problems on macOS \u0026 Windows\n\n#### Configuration file\n\n~~~~\n{\n  \"debug\": true,\n  \"nodeURL\": \"https://arweave.net\",\n  \"ipfsGateway\": \"https://ipfs.infura.io/ipfs/\",\n  \"walletFile\": \"/path_to_your_wallet/arweave-wallet.json\",\n  \"cleanup\": true,\n  \"server\": {\n    \"host\": \"0.0.0.0\",\n    \"port\": 5555\n  }\n}\n~~~~\n\nWhere:\n\n- **debug** runs with much more verbosity\n- **nodeURL** how to connect to arweave\n- **ipfsGateway** - your IPFS gateway. See below\n- **walletFile** the json AR wallet file location\n- **cleanup** deletes the files after they get retrieved. use false if you want to debug things\n- **server's ip/port**: how to run this API service\n\nabout IPFS gateway:\n\nchoices: \n- http://127.0.0.1:8080/ipfs/\n- https://ipfs.infura.io/ipfs/\n- https://cloudflare-ipfs.com/ipfs/\n- https://ipfs.io/ipfs/\n\nWhat if you want to host your own gateway ?\n\nmake sure you crete an api that will just accept a ipfs hash after the \"/\"\n\n\n## Other API Endpoints\n\n#### :point_right: Ping\n##### GET /api/ping \n   \nused to check if the service is alive\n\noutput:\n~~~~\npong\n~~~~\n   \n#### :point_right: Check your AR Token balance\n##### GET /api/balance\n\nreturns your balance of AR Tokens\n\noutput:\n~~~~\n{\n    \"ar\": \"0.9996836928\",\n    \"winston\": \"999683692828\"\n}\n~~~~\n   \n\n#### :point_right: Retrieve a transaction or check if it's pending\n##### GET /api/check_tx_arweave?transaction_id=TRANSACTION_ID\n\n\u003e example: /api/check_tx_arweave?transaction_id=bnRQhVkook_lPv8uxuDRcj-wC5R2nfVps-2qA6-81WU\n\noutput:\n~~~~\nthe transaction details or it's status (ex: pending)\n~~~~\n\n\n### Other helper API calls that you might need\n\n#### :point_right: Retrieve a file from IPFS\n\n##### GET /api/ipfs?hash=IPFS_HASH\n\n\u003e example: /api/ipfs?hash=QmbRmU9vYwH9Hhn1eH1WEFVS9sugpGSdJrfqtuZ329EgZA\n\noutput:\n~~~~\ncontent of the file from IPFS\n~~~~\n\n#### :point_right: Retrieve a file from Arweave\n\n##### GET /api/arweave?transaction_id=TRANSACTION_ID\u0026decode=true\n\n\u003e example: /api/arweave?transaction_id=GyrTvuUBK9AgVLGBA8SsOHkUYmWApNqvJtMjJZZIvbQ\u0026decode=BOOLEAN\u0026extract=true\n\noutput:\n~~~~\ncontent of the file from Arweave\n~~~~\n\nWhere:\n\n- **decoded** (true or false) if you want it decoded or not\n- **extract** (true or false) if you posted zipped, it will unzip it \n\n\n\n\n#### :point_right: Post content directly to Arweave\n\n##### POST /api/transfer_arweave\n\nwith:\n~~~~\n{\n    \"payload\": \"CXR4SUQsIHBheWxvYWRMZW4sIGVyciA6PSBhcndlYXZlLlRyYW5zZmVyRGlyZWN0bHlBcndlYXZlKG5UcmFuc2Zlci5QYXlsb2FkLCBhclRhZ3MsIGNvbmZpZ3VyYXRpb24pCglpZiBlcnIgIT0gbmlsIHsKCQljLkpTT04oaHR0cC5TdGF0dXNCYWRSZXF1ZXN0LCBnaW4uSHsiZXJyb3IiOiBlcnIuRXJyb3IoKX0pCgkJcmV0dXJuCgl9CgoJbG9nLlByaW50ZigiVHJhbnNmZXIgdG8gQXJ3ZWF2ZSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIFR4IElEICVzIiwgdHhJRCkKCgljLkpTT04oaHR0cC5TdGF0dXNPSywgZ2luLkh7ImlkIjogdHhJRCwgInBheWxvYWRfYnl0ZXMiOiBwYXlsb2FkTGVuLCAiZHVyYXRpb24iOiBmbXQuU3ByaW50ZigiJXMiLCB0aW1lLlNpbmNlKHN0YXJ0KSl9KQ==\",\n    \"tags\": [\n        {\n            \"key\": \"key1\",\n            \n           \"value\": \"value1\"\n        },\n        {\n            \"key2\": \"value2\"\n        }\n    ]\n}\n~~~~\n\nWhere:\n\n- **decoded** (true or false) if you want it decoded or not\n- **extract** (true or false) if you posted zipped, it will unzip it \n\n\n\n\n### Special thanks to:\n\nhttps://github.com/Dev43/arweave-go -\u003e for the transaction signing \u0026 sending code\n\n### Bugs / Features / Questions\n\nfell free to create an issue\n\n### TODO://\n\n- [x] compression\n- [x] docker\n- [x] golang-ci yml\n- [ ] awaiting your idea\n\n\n## Project Values\n\nThis project has a few principle-based goals that guide its development:\n\n- **Limit dependencies.** Keep the package lightweight.\n\n- **Pure Go.** This means no cgo or other external/system dependencies. This package should be able to stand on its own and cross-compile easily to any platform -- and that includes its library dependencies.\n\n- **Idiomatic Go.** Keep interfaces small, variable names semantic, vet shows no errors, the linter (golangci lint) is generally quiet, etc.\n\n- **Well-documented.** Use comments prudently; explain why non-obvious code is necessary (and use tests to enforce it). Keep the docs updated, and have examples where helpful.\n\n- **Keep it efficient.** This often means keep it simple. Fast code is valuable.\n\n- **Consensus.** Contributions should ideally be approved by multiple reviewers before being merged. Generally, avoid merging multi-chunk changes that do not go through at least one or two iterations/reviews. Except for trivial changes, PRs are seldom ready to merge right away.\n\n- **Have fun contributing.** Coding is awesome!\n\nI welcome contributions and appreciate your efforts! However, please open issues to discuss any changes before spending the time preparing a pull request. \nThis will save time, reduce frustration, and help coordinate the work. Thank you!\n\n\n## License\n\nIPFS Arweave Bridge is released under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAndreiD%2Farweave-ipfs-bridge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAndreiD%2Farweave-ipfs-bridge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAndreiD%2Farweave-ipfs-bridge/lists"}