Tutorial · Vaults · Testnet ★

Vault Security: What a Manager Can and Cannot Do

The vault script explained, and the proof: two manager wallets ordered to take the owner's coins, every attempt refused. What the owner must protect, and how to test a manager before trusting them.

About 10 minutes · Checked 2026-10-21

1The one rule

The manager can stake your coins. The manager cannot move your coins.

That is enforced by the Divi blockchain, not by the manager's honesty, not by their software, not by a contract. A dishonest manager with a modified wallet still cannot take them. The only key that can send vault coins anywhere is the owner key. Keep it.

2Why: the script, line by line

Every vault output on the chain carries this script (from decompose a vault):

OP_IF
    <owner key hash>
OP_ELSE
    OP_REQUIRE_COINSTAKE
    <manager key hash>
OP_ENDIF
OP_OVER OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

Whoever spends the output chooses a branch. The owner branch asks for a signature from the owner key, in any transaction. The manager branch asks for a signature from the manager key and runs OP_REQUIRE_COINSTAKE, which fails unless the spending transaction is a coinstake: the first transaction of a proof-of-stake block, whose outputs by consensus must return the staked coins to the same script plus the reward. Every node checks this before accepting a block. A coinstake that pays a vault input to a different address is an invalid block, and the network rejects it.

Source: the OP_REQUIRE_COINSTAKE handler in script/StackManager.cpp of Divi Core; the vault script builder in script/StakingVaultScript.cpp.

3What a manager can do

4What a manager cannot do (proved)

On 2026-10-21 we ran a Divi Core manager holding 20 of its own tDIVI plus 170 in other people's vaults, and an IronDivi manager holding 50 own plus 219 vaulted, and told each one to take the vault coins. Every attempt failed:

AttemptDivi Core managerIronDivi manager
Send 100 to another addressInsufficient funds: 10000000000(total requested) is greater than 1999990080(total available)Only signed 0 of 1 inputs
reclaimvaultfunds 1Insufficient funds: … greater than 0(total available)No vault funds available to reclaim (no owner keys found for any vaults)
debitvaultbyname from the owner's vaultVault owner key is unknown: ownership=0 address=y8PL…5Ut5Ajnot yet implemented
Move the vault to a different managerImpossible. A new vault needs a fundvault transaction signed by the owner. The manager can only point the old vault at nothing.

These are wallet-level refusals; the wallet will not even build the transaction. A manager who patched their wallet to build one anyway would have it rejected by every node because the signature check cannot pass without the owner key, and the coinstake branch cannot pass outside a coinstake. Full transcript in the folder for this page.

Two more things a manager cannot do:

5What you, the owner, must protect

6Checks before trusting a manager

  1. Ask for one address, nothing else. A manager never needs your phrase, your wallet file, or your RPC password.
  2. Fund a small vault first, wait a block, and look it up in Explorer 2.0: type vault, addresses [you, manager].
  3. Reclaim it. If the coins come back, you have proved the whole loop on that chain with that manager.
  4. Then fund the real amount in a new vault.

7Going to mainnet

The script is identical on mainnet; only the address prefix changes (D instead of x/y). What changes for you is that mistakes cost real coins:

Still unsure? Ask the Divi chatbot.