Overgive Chain is a Cosmos SDK blockchain built with Ignite CLI.
Overgive Chain is designed as a supporting blockchain layer for the Overgive Crowdfunding Platform (Web2 application). It is used to store immutable records of donation data and donation distribution (delivery) data as a cryptographic proof layer to ensure transparency, integrity, and auditability. Full business logic and detailed data remain in the Web2 backend, while the blockchain functions as a tamper-proof public ledger.
GitHub Repository (Web App):
https://github.com/zakoraa/overgive-web
Verify:
go versioncurl https://get.ignite.com/cli! | bashVerify:
ignite versionInside project directory:
ignite chain serve- Build the chain
- Initialize state
- Start validator
- Expose RPC at: http://localhost:26657
Check available keys:
overgive-chaind keys listCheck admin address:
overgive-chaind keys show overgive-admin -aCreate new wallet:
overgive-chaind keys add writer1Check address:
overgive-chaind keys show writer1 -aSend token from admin to writer1:
overgive-chaind tx bank send overgive-admin $(overgive-chaind keys show writer1 -a) 1000000stake --chain-id overgivechain --gas auto -yVerify balance:
overgive-chaind query bank balances $(overgive-chaind keys show writer1 -a)If balance appears -> account is active and ready to send transactions.
Before recording Donation or Delivery,
you MUST register the address in permissions.
Only admin/authority can do this.
overgive-chaind tx permissions create-allowed <address> --from overgive-admin --chain-id overgivechain --gas auto -yExample:
overgive-chaind tx permissions create-allowed $(overgive-chaind keys show writer1 -a) --from overgive-admin --chain-id overgivechain --gas auto -yVerify:
overgive-chaind query permissions get-allowed <address>If not allowed -> Donation & Delivery will fail with:
"not allowed writer"
For full Permissions module documentation, see:
SECTION: 2.1 PERMISSIONS MODULE
Only allowed address can execute.
overgive-chaind tx donation record-donation campaign1 750000 IDR PAY123 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb --from writer1 --chain-id overgivechain --gas auto -yQuery Donation:
overgive-chaind query donation donations
For full Donation module documentation, see:
SECTION: 2.2 DONATION MODULE
Only allowed address can execute.
overgive-chaind tx delivery record-delivery campaign1 "Laporan Bantuan Palestina" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb --from writer1 --chain-id overgivechain --gas auto -yQuery Delivery:
overgive-chaind query delivery deliveries
For full Delivery module documentation, see:
SECTION: 2.3 DELIVERY MODULE
- Install Go & Ignite
- Run
ignite chain serve - Create wallet (writer1)
- Fund wallet (bank send from admin)
- Admin -> create-allowed address
- Allowed wallet -> record donation
- Allowed wallet -> record delivery
- Query data
Without create-allowed → transactions will fail.
Check address:
overgive-chaind keys show <name> -aCheck tx by hash:
overgive-chaind query tx <txhash>The Permissions module controls which addresses are allowed to record Donation and Delivery data on-chain.
If an address is not registered, transactions will fail with:
"not allowed writer"
Registers a new address as an authorized writer. Only admin/authority can execute this transaction.
overgive-chaind tx permissions create-allowed <address> --from overgive-admin --chain-id overgivechain --gas auto -yRemoves an address from the allowed list. After deletion, the address can no longer record data.
overgive-chaind tx permissions delete-allowed <address> --from overgive-admin --chain-id overgivechain --gas auto -yChecks whether an address is registered.
overgive-chaind query permissions get-allowed <address>Returns all registered allowed addresses (supports pagination).
overgive-chaind query permissions list-allowedReturns current permissions module parameters.
overgive-chaind query permissions paramsBase REST Path:
/overgive-chain/permissions/v1GET /overgive-chain/permissions/v1/paramshttp://localhost:1317/overgive-chain/permissions/v1/paramsGET /overgive-chain/permissions/v1/allowed/{address}http://localhost:1317/overgive-chain/permissions/v1/allowed/overgive1xxxxxGET /overgive-chain/permissions/v1/allowedWith pagination:
GET /overgive-chain/permissions/v1/allowed?pagination.limit=10The Donation module stores immutable donation records as cryptographic proof. Only allowed addresses can record donations.
Creates a new donation record on-chain.
overgive-chaind tx donation record-donation campaign1 750000 IDR PAY123 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb --from writer1 --chain-id overgivechain --gas auto -yReturns all donation records stored on-chain (with pagination).
overgive-chaind query donation donationsExample output:
donations:
- id: "0"
amount: "750000"
campaign_id: campaign1
creator: overgive1z52eaynmwfj7qeu7dw7xyyat3grj3hajlu2l9k
currency: IDR
donation_hash: 36c3e2478cd6c07c98c1ad8cc0644e75b882f30eefcb0b6e0a29fee4d8ab3f0c
metadata_hash: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
payment_reference_id: PAY123
recorded_at: "1772425897"
pagination:
total: "1"If the dataset grows, use pagination:
overgive-chaind query donation donations --page-limit 10Retrieves a single donation using its internal auto-increment ID.
overgive-chaind query donation donation --id <id>Example:
overgive-chaind query donation donation --id 0Retrieves a donation using its unique donation_hash.
overgive-chaind query donation donation-by-hash --donation-hash <donation_hash>Base REST Path:
/overgivechain/donation/v1GET /overgivechain/donation/v1/paramshttp://localhost:1317/overgivechain/donation/v1/paramsGET /overgivechain/donation/v1/donationsWith pagination:
GET /overgivechain/donation/v1/donations?pagination.limit=10GET /overgivechain/donation/v1/donations/{id}http://localhost:1317/overgivechain/donation/v1/donations/0GET /overgivechain/donation/v1/donations/hash/{donation_hash}http://localhost:1317/overgivechain/donation/v1/donations/hash/36c3e2478cd6c07c98c1ad8cc0644e75b882f30eefcb0b6e0a29fee4d8ab3f0cThe Delivery module stores immutable distribution (delivery) records linked to campaign activities.
Only allowed addresses can record delivery data.
Creates a new delivery record on-chain.
overgive-chaind tx delivery record-delivery campaign1 "Laporan Bantuan Palestina" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb --from writer1 --chain-id overgivechain --gas auto -yReturns all delivery records stored on-chain (with pagination).
overgive-chaind query delivery deliveriesExample output:
deliveries:
- campaign_id: campaign1
creator: overgive1yz7hxhedy7a45kq55z3kxcr7ta99zt0eda5hf9
delivery_hash: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
note_hash: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
recorded_at: "1772126435"
title: Laporan Bantuan Palestina
pagination:
total: "1"If the dataset grows, use pagination:
overgive-chaind query delivery deliveries --page-limit 10Retrieves a single delivery using its internal auto-increment ID.
overgive-chaind query delivery delivery --id <id>Example:
overgive-chaind query delivery delivery --id 0Retrieves a delivery using its unique delivery_hash.
overgive-chaind query delivery delivery-by-hash --delivery-hash <delivery_hash>Base REST Path:
/overgivechain/delivery/v1GET /overgivechain/delivery/v1/paramsGET /overgivechain/delivery/v1/deliveriesWith pagination:
GET /overgivechain/delivery/v1/deliveries?pagination.limit=10GET /overgivechain/delivery/v1/deliveries/{id}GET /overgivechain/delivery/v1/deliveries/hash/{delivery_hash}