Skip to main content

Don't Trust, Verify

Living by the motto, "Don't Trust, Verify", DePay's payment protocol empowers everyone to verify payments before executing them.

Wallets

Wallets can seamlessly incorporate an auto-verification feature for payments made via the DePay payment protocol.

This enhancement aids users in comprehending the transactions they're executing.

Every wallet can integrate a "Payment" screen when users initiate a payment using the DePay payment protocol.

Learn how wallets can integrate a verified "Payment" screen

Verification form

The following form allows you to validate DePay payments quickly:

Verify manually

Even if your wallet doesn't support integrated DePay Payment verification, you can utilize this page to manually validate the payment on your own.

Verify contract address

The DePay protocol address operates as a trusted and audited smart contract, designed to streamline payment processes.

Upon initializing a payment, your wallet will showcase a transaction overview.

The first step is to ensure that the contract you're interacting with is indeed the DePay payment protocol.

On blockchain explorer

Click on the contract address, or copy it in order to open it on a blockchain explorer.

DePay's payment smart contracts are presently labeled on blockchain explorers as DePay: Router v2. If you access the contract address on the blockchain explorer, ensure that the contract carries this exact label.

On DePay's deployment page

Alternatively, you can also check that the contract address you are interacting with is listed on DePay's protocol deployment page.

Verify payment details

If your wallet provides you with the HEX calldata prepared to call the DePay payment protocol, you can ue the Verification Form on this to easily validate the payment.

Verify decoded transactions

Some wallets that support transaction decoding will be able to display the payment details in a more human readable way:

[
105000000000000000, // amount paid in
24034, // payment amount paid to payment receiver
0, // fee amount paid to fee receiver
0, // fee amount paid to secondary fee receiver
0, // fee amount paid to protocol
1748277017920, // deadline (after which the payment will revery)
"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", // token address of the input token
"0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45", // address of the used exchange (for conversion)
"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", // token address of the output token
"0x08B277154218CCF3380CAE48d630DA13462E3950", // address of the payment receiver
"0x0000000000000000000000000000000000000000", // address of the fee receiver
"0x0000000000000000000000000000000000000000", // address of the secondary fee receiver
1, // exchange type
0, // receiver type
false, // permit2
// following the auto conversion data
"0xac9650d800000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000241c58db4f00000000000000000000000000000000000000000000000001732c47109514d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104b858183f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f50000000000000000000000000000000000000000000000000000000000000002b0d500b1d8e8ef31e21c99d1db9a6444d3adf12700001f43c499c542cef5e3811e1192ce70d8cc03d5c335900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412210e8a00000000000000000000000000000000000000000000000000000000",
// following the receiver call data
"0x0000000000000000000000000000000000000000"
]

Those parameters have the following meaning, from the top to bottom:

#1 is the amount paid. In our example 105000000000000000.

#2 specifies the amount that will be disbursed to the payment receiver.

#3 specifies the amount that will be disbursed to the fee receiver.

#4 specifies the amount that will be disbursed to the secondary fee receiver.

#5 specifies the amount that will be disbursed to the protocol (fee).

#6 defines the timestamp after which the payment will be dropped by the payment protocol.

#7 represents the address of the token used as input.

#8 represents the address of the exchange used to perform a conversion as part of the payment. If this is set to 0x0000000000000000000000000000000000000000 no conversion will be performed.

#9 represents the address of the token used as payout. The payment and fee receivers will receive this token as part of this payment.

#10 represents the address of the payment receiver.

#11 represents the address of the fee receiver.

#12 represents the address of the secondary fee receiver.

#13 defines the type of how to convert tokens with the exchange.

#14 defines the type of how to forwarded payments to a smart contract receiver if payment receiver is a smart contract.

#15 indicates whether the payment utilizes Permit2 (a standard for granting token usage approvals to smart contracts) or not. If set to false, tokens will be transferred based on prior token approvals, which are granted in a distinct, dedicated transaction.

#16 defines the data used to execute the conversion on the exchange.

#17 defines the data used to call the payment receiver if the receiver is a smart contract and supposed to be called.