Skip to main content

Get Paid

A wallet is a contract whose id is your key, and only that key can extend it. Your address is that id, in the Modality spelling. Someone can send to it before the wallet is on the network. Receiving is a commit you sign.

This continues On the testnet. MOD on that network is the genesis contract's asset, paid to a miner. The commands are wallet commands. Full modal only.

Make the wallet from a key you control. A miner's MOD arrives at the node's key, so a mining node uses its node.modal_passfile. Anyone else uses a passfile of their own.

modal wallet create --key example/alice --dir ./alice-wallet
modal wallet address --dir ./alice-wallet

The address is Alice's key. Ask the other party, or your own second wallet, to send a testnet amount of MOD to it. From a wallet that already holds MOD:

modal wallet send \
--dir ./bob-wallet \
--to <alice's address> \
--amount 1 \
--asset MOD

send refuses an amount the wallet does not hold, an amount finer than the asset's decimals, and an amount that is not a multiple of its divisibility. That refusal happens before a commit is pushed.

Alice lists what is waiting, then receives it. recv writes one RECV per waiting send, signed by her key, and pushes.

modal wallet incoming --dir ./alice-wallet
modal wallet recv --dir ./alice-wallet
modal wallet balance --dir ./alice-wallet

A second recv before the first batch has sequenced does not receive the same send twice. A receive that names a send which was not to this wallet, or states a different amount, is refused when the network applies it. The waiting list is the set of sends that apply will accept.

The idea​

The wallet's genesis posts its key at /signers/1.id and the rule always([-signed_by(/signers/1.id)] false). Sending and receiving MOD are commits on that contract, checked like any other commit. The address you pay is the contract id. Decimals are display: an --amount of 1 is one whole MOD, which the chain stores in the asset's smallest unit.

Next: Someone else's word.