Stablecoin → Ramp

VLStaking

Permanent, one-way stablecoin reserves that trigger notarized Ramp issuance, alongside legacy VOW stake accounting.

What VLStaking is for.

Permanent, one-way stablecoin reserves that trigger notarized Ramp issuance, alongside legacy VOW stake accounting.

The owner adds supported coins by address and authorizes direct-transfer processors. Anyone may stake an enabled coin from an approved balance; only the configured VLNotary route can trigger VLMint.

How it fits together.

  1. The owner enables a stablecoin by address; a holder may approve and stake it, or transfer it directly for an authorized off-chain processor to record.
  2. VLStaking permanently accounts for the received reserve and certifies a finance:stablecoin:stake event through VLNotary.
  3. VLMint consumes that certification and mints the decimal-normalized Ramp USD balance to the staking account; there is no Ramp burn or stablecoin release path.

Declared public interface.

These are the public and external methods declared directly by VLStaking. Inherited token, ownership, and upgrade methods follow their respective standards.

registryName() returns (string memory)Read

Returns the human-readable name used for contract registration.

setVerifier(address verifier, bool enabled)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

setGovernor(address governor, bool enabled)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

setGovernor(address governor)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

removeGovernor(address governor)Transaction · onlyOwner

Removes or releases the specified record, permission, or held value.

setVerifier(address verifier)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

setVerifier(address verifier, uint8)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

removeVerifier(address verifier)Transaction · onlyOwner

Removes or releases the specified record, permission, or held value.

addStablecoin(address stablecoin)Transaction · onlyOwner

Executes the add stablecoin operation.

setStablecoinProcessor(address processor, bool enabled)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

setTokenRuleManager(address manager, bool enabled)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

configureTokenRule(address token, uint64 minimumLockDuration, bool permanent)Transaction

Executes the configure token rule operation.

setTokenOperator(address token, address operator, bool enabled)Transaction

Updates the named protocol configuration value or permission.

stakeTokenFor(address token, uint256 amount, address account, uint64 lockDuration)Transaction

Executes the stake token for operation.

releaseTokenStake(address token, address account, address recipient) returns (uint256 amount)Transaction

Removes or releases the specified record, permission, or held value.

tokenStake(address token, address account) returns (TokenStake memory)Read

Executes the token stake operation.

setStablecoinNotary(address notary_, uint256 subscriptionId)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

stablecoinCount() returns (uint256)Read

Executes the stablecoin count operation.

stakeStablecoin(address stablecoin, uint256 amount)Transaction

Executes the stake stablecoin operation.

stakeStablecoinFor(address stablecoin, uint256 amount, address account)Transaction

Executes the stake stablecoin for operation.

processStablecoinTransfer(address stablecoin, uint256 amount, address account)Transaction

Executes the process stablecoin transfer operation.

totalStake(address user) returns (uint256 vowAmount, uint256 mintedAmount)Read

Reads the requested contract state or calculated result without changing state.

totalStake(address vcToken, address user) returns (uint256 vowAmount, uint256 mintedAmount)Read

Reads the requested contract state or calculated result without changing state.

lockFor(address vcToken, address stakeOwner, address mintRecipient, uint256 vowAmount, uint256 mintedAmount)Transaction

Executes the lock for operation.

releaseAllStake(address vcToken, address stakeOwner) returns (uint256 vowAmount, uint256 mintedAmount)Transaction

Removes or releases the specified record, permission, or held value.

consumeStake(address vcToken, address stakeOwner, uint256 requestedAmount) returns (uint256 vowToReturn, uint256 burnedAmount, uint256 remainder)Transaction

Executes the consume stake operation.

tokensReceived(address, address from, address, uint256 amount, bytes calldata userData, bytes calldata)Transaction

Handles an ERC-777 token-receipt callback.

Connect with ethers v6.

import { Contract, JsonRpcProvider, Wallet, encodeBytes32String, parseUnits } from "ethers";

const provider = new JsonRpcProvider(process.env.RPC_URL);
const signer = new Wallet(process.env.SIGNER_PRIVATE_KEY, provider);
const at = (address, abi, writable = false) =>
  new Contract(address, abi, writable ? signer : provider);

const staking = at(STAKING, [
  "function stakeStablecoin(address,uint256)",
  "function stablecoinStakeOf(address,address) view returns (uint256)"
], true);
await stablecoin.approve(STAKING, parseUnits("25", 6));
await (await staking.stakeStablecoin(USDC, parseUnits("25", 6))).wait();

Use the address for the chain you selected.

Read the deployment manifest or resolve the configured registry entry for the target network. Test on a local or test network before using a privileged signer. See the contract source and contract index for the full interface.