Skip to content

Verify your transactions

Use this page while your wallet is open. Compare the prompt with the published addresses and with your loan contract. If a field does not match, do not sign.

A hardware wallet is a device that holds the key offline and shows the transaction on its own screen. Use that screen, not only the app or the computer.

Compare these names and addresses with the open wallet prompt. You are on Ethereum mainnet (chain ID 1). If a field does not match, do not sign.

Asset Address
WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
wstETH 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
WBTC 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
cbBTC 0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf

Anvil Collateral Vault: 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f

  • approve on the token. The wallet labels the vault spender. A spending-cap screen says Spender. A raw WETH decode says guy and wad. Same address: the vault. The amount is this deposit, not an unlimited approval.
  • depositToAccount on the vault. _accountAddress is your own wallet. _tokenAddresses is the token above. _amounts is the deposit.
  • depositAndApprove on the vault, when this deposit also sets the allowance. _tokenAddresses and _amounts are the deposit. _collateralizableContractAddressToApprove is the Letter of Credit address below.
  • Approving and depositing additional collateral: see above. The functions are approve, then depositToAccount or depositAndApprove.
  • Signing the allowance. This is not a transaction. The type name is CollateralizableTokenAllowanceAdjustment. name is CollateralVault. version is 1. chainId is 1. verifyingContract is the vault above. collateralizableAddress is the Letter of Credit below. tokenAddress is the collateral token above.
  • createDynamicLOC on the Letter of Credit contract 0x14db9a91933aD9433E1A0dB04D08e5D9EF7c4808. The vault is not a field on this call.
    • _beneficiary: 0xF09eB5B1a72F5Ba260fBB5a998d3686eAbDeF3A7. Match this to your loan contract.
    • _collateralTokenAddress: the token you deposited.
    • _collateralTokenAmount: the reserved amount in the app.
    • _creditedTokenAddress: USDT 0xdAC17F958D2ee523a2206206994597C13D831ec7 for a USD loan, or EURC 0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c for a CHF loan.
    • _creditedTokenAmount: principal plus full-term interest, plus the FX buffer on a CHF loan.
    • _expirationTimestamp: loan maturity plus 5 days.
Contract Job Address
Anvil Collateral Vault Holds your coins. This is the spender on approve, and verifyingContract on the allowance signature. 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f
Anvil Letter of Credit The contract you authorize to reserve collateral, and the contract you call with createDynamicLOC. 0x14db9a91933aD9433E1A0dB04D08e5D9EF7c4808
Helva beneficiary contract (LOCBeneficiary) Named as _beneficiary on the Letter of Credit. Not your vault. Not the lender’s wallet. 0xF09eB5B1a72F5Ba260fBB5a998d3686eAbDeF3A7, and your loan contract

The app shows a human amount, such as 1.5 WETH. The wallet may show the same amount in the token’s smallest units.

Asset Decimals Example
WETH, wstETH 18 1 token = 1000000000000000000
WBTC, cbBTC 8 1 token = 100000000
USDT, EURC 6 1 token = 1000000

Confirm you are on Ethereum mainnet (chain ID 1).

You may not see every step. Approve is skipped when the vault already has enough allowance for this deposit. Deposit is skipped when your vault already holds enough. Sign allowance is skipped when that allowance is already set, including when the deposit transaction set it. Create LoC is always required to reserve collateral for a new loan.

flowchart TD
    A[1. Approve] --> Q1[Wallet fields match?]
    Q1 -->|No| Stop[Do not sign. Contact Helva]
    Q1 -->|Yes| B[2. Deposit]
    B --> Q2[Wallet fields match?]
    Q2 -->|No| Stop
    Q2 -->|Yes| C[3. Sign allowance]
    C --> Q3[Wallet fields match?]
    Q3 -->|No| Stop
    Q3 -->|Yes| D[4. Create LoC]
    D --> Q4[Wallet fields match?]
    Q4 -->|No| Stop
    Q4 -->|Yes| Done[Letter of Credit created. Helva checks it on-chain before activating the loan]

On-chain transaction. You pay gas.

Your wallet asks the token contract to approve a spender. The first time you deposit that token, or when an older approval is smaller than this deposit, you will see this step.

Field Should match Where to cross-check
Token The collateral asset you selected: WETH, wstETH, WBTC, or cbBTC The asset in the app, and the token address in the TLDR above
Spender Anvil Collateral Vault 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f TLDR above. Do not rely on the app alone
Amount The amount you are about to deposit, not an unlimited approval The deposit amount in the app. Convert smallest units with the table above

Why it matters: approving an unknown spender can drain that token from your wallet.

On-chain transaction. You pay gas.

The usual call is depositToAccount on the Anvil Collateral Vault. The coins are credited to your own address.

Field Should match Where to cross-check
Contract you are calling Anvil Collateral Vault 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f TLDR above
Token The same asset you approved App, and the TLDR above
Amount The deposit amount App
Account credited Your own connected wallet address The account shown in your wallet

Why it matters: you are depositing to yourself. A different account means the coins would not be credited to you.

When the amount you deposit covers the allowance the Letter of Credit needs, the app may send depositAndApprove instead. You will not see a separate Sign allowance step. There is no account field on this call. The wallet that sends the transaction is the account that gets the deposit, so that wallet must be yours.

Field Should match Where to cross-check
Contract you are calling Anvil Collateral Vault 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f TLDR above
Token and amount The deposit you intend App
Address being approved Anvil Letter of Credit contract 0x14db9a91933aD9433E1A0dB04D08e5D9EF7c4808 TLDR above

Why it matters: this call both deposits and lets the Letter of Credit contract reserve that deposit. The approved address must be the Letter of Credit contract, not an unknown contract.

EIP-712 typed-data signature. Not a transaction. You pay no gas. Nothing is sent until the next step.

EIP-712 is a signature format that lets the wallet show named fields. The type name is CollateralizableTokenAllowanceAdjustment. This signature lets the Letter of Credit contract reserve collateral from your vault.

The message has no deadline. If the wallet shows an expiry on this signature, stop.

Field Should match Where to cross-check
name CollateralVault This page
version 1 This page
chainId 1 (Ethereum mainnet) Your wallet’s network
verifyingContract Anvil Collateral Vault 0x5d2725fdE4d7Aa3388DA4519ac0449Cc031d675f TLDR above
Field Should match Where to cross-check
collateralizableAddress Anvil Letter of Credit contract 0x14db9a91933aD9433E1A0dB04D08e5D9EF7c4808 TLDR above. This is not the vault, and not the beneficiary
tokenAddress The collateral token you are reserving App, and the TLDR above
allowanceAdjustment The full collateral amount being reserved, in smallest units. This can be larger than the deposit you just made, because it covers the whole reservation The reserved amount in the app
approverNonce A number. You do not choose it. It must be present No published value. Reject the prompt if this field is missing, or if any other message field is present

Why it matters: this authorizes the Letter of Credit contract to reserve collateral from your vault. A wrong collateralizableAddress authorizes some other contract.

On-chain transaction. You pay gas. The call is createDynamicLOC on the Anvil Letter of Credit contract.

The credited amount is principal plus full-term interest. For a CHF loan it also includes the FX buffer. USD loans use USDT and have no buffer. CHF loans use EURC.

Expiration is loan maturity plus 5 days, shown as a date or as a Unix timestamp (seconds since 1970).

Field Should match Where to cross-check
Contract you are calling Anvil Letter of Credit contract 0x14db9a91933aD9433E1A0dB04D08e5D9EF7c4808 TLDR above
_beneficiary 0xF09eB5B1a72F5Ba260fBB5a998d3686eAbDeF3A7 TLDR above, and your loan contract. Not the lender’s wallet. Not the vault
_collateralTokenAddress The token you deposited App, and the TLDR above
_collateralTokenAmount The amount being reserved. It may be less than your full vault balance The reserved amount in the app
_creditedTokenAddress USDT 0xdAC17F958D2ee523a2206206994597C13D831ec7 for a USD loan, EURC 0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c for a CHF loan App, and the TLDR above
_creditedTokenAmount Principal plus full-term interest, plus the FX buffer for a CHF loan, in the credit token’s smallest units App, and The FX buffer
_expirationTimestamp Loan maturity plus 5 days The maturity date in your loan contract, plus 5 days
ETH value, if shown Zero, or a fee that pays the price-oracle update It is not your collateral. There is no second published figure for this fee. If you are unsure, contact Helva before you sign
_oraclePriceUpdate Opaque bytes, or empty (0x) You do not need to decode this. Confirm the readable fields
_collateralizableAllowanceSignature Opaque bytes, or empty (0x) if the allowance is already set You do not need to decode this. Empty is normal when you used depositAndApprove or an existing allowance
_tag Empty (0x) This field does not authorize anything. If the readable fields are wrong, do not sign

Why it matters: these fields decide who can redeem, how much collateral is reserved, and what credit amount that reservation covers.

Do not sign. Contact Helva at support@helva.finance.

If a Letter of Credit was already created with the wrong beneficiary, Helva reads every Letter of Credit from the chain before activating a loan, so that loan will not be activated. The coins stay in your vault, reserved, until the Letter of Credit is cancelled.

Before expiry, only the named beneficiary can cancel it, or someone holding a cancel authorization from that beneficiary. Helva does not issue those authorizations, and Helva cannot cancel a Letter of Credit that names someone else. After it expires, you can cancel it yourself. That releases the reservation. This is why you check the beneficiary before you sign.

Before a loan is activated, Helva reads the Letter of Credit from the chain, not from the app:

  • The Letter of Credit exists.
  • The beneficiary is Helva’s beneficiary contract.
  • The credit asset and the credit amount match the loan, including the FX buffer on a CHF loan.
  • Expiration is loan maturity plus 5 days.
  • The creator is your registered wallet.

A mismatch means the loan is not activated.

Next: Deposit & reserve collateral · Security at a glance