Interfaces

These interfaces are available as .sol files and are useful to interact with third party contracts that implement them.

Core

IConfidentialFungibleToken

import "@openzeppelin/confidential-contracts/interfaces/IConfidentialFungibleToken.sol";

Draft interface for a confidential fungible token standard utilizing the Zama TFHE library.

Functions
  • name()

  • symbol()

  • decimals()

  • tokenURI()

  • totalSupply()

  • balanceOf(account)

  • isOperator(holder, spender)

  • setOperator(operator, until)

  • confidentialTransfer(to, encryptedAmount, inputProof)

  • confidentialTransfer(to, amount)

  • confidentialTransferFrom(from, to, encryptedAmount, inputProof)

  • confidentialTransferFrom(from, to, amount)

  • confidentialTransferAndCall(to, encryptedAmount, inputProof, data)

  • confidentialTransferAndCall(to, amount, data)

  • confidentialTransferFromAndCall(from, to, encryptedAmount, inputProof, data)

  • confidentialTransferFromAndCall(from, to, amount, data)

Events
  • OperatorSet(holder, operator, until)

  • ConfidentialTransfer(from, to, amount)

  • EncryptedAmountDisclosed(encryptedAmount, amount)

name() → string external

Returns the name of the token.

symbol() → string external

Returns the symbol of the token.

decimals() → uint8 external

Returns the number of decimals of the token. Recommended to be 9.

tokenURI() → string external

Returns the token URI.

totalSupply() → euint64 external

Returns the encrypted total supply of the token.

balanceOf(address account) → euint64 external

Returns the encrypted balance of the account account.

isOperator(address holder, address spender) → bool external

Returns true if spender is currently an operator for holder.

setOperator(address operator, uint48 until) external

Sets operator as an operator for holder until the timestamp until.

An operator may transfer any amount of tokens on behalf of a holder while approved.

confidentialTransfer(address to, einput encryptedAmount, bytes inputProof) → euint64 external

Transfers the encrypted amount encryptedAmount to to with the given input proof inputProof.

Returns the encrypted amount that was actually transferred.

confidentialTransfer(address to, euint64 amount) → euint64 transferred external

Similar to confidentialTransfer but without an input proof. The caller must already be allowed by ACL for the given amount.

confidentialTransferFrom(address from, address to, einput encryptedAmount, bytes inputProof) → euint64 external

Transfers the encrypted amount encryptedAmount from from to to with the given input proof inputProof. msg.sender must be either from or an operator for from.

Returns the encrypted amount that was actually transferred.

confidentialTransferFrom(address from, address to, euint64 amount) → euint64 transferred external

Similar to confidentialTransferFrom but without an input proof. The caller must be already allowed by ACL for the given amount.

confidentialTransferAndCall(address to, einput encryptedAmount, bytes inputProof, bytes data) → euint64 transferred external

Similar to confidentialTransfer but with a callback to to after the transfer.

The callback is made to the IConfidentialFungibleTokenReceiver.onConfidentialTransferReceived function on the to address with the actual transferred amount (may differ from the given encryptedAmount) and the given data data.

confidentialTransferAndCall(address to, euint64 amount, bytes data) → euint64 transferred external

Similar to confidentialTransfer but with a callback to to after the transfer.

confidentialTransferFromAndCall(address from, address to, einput encryptedAmount, bytes inputProof, bytes data) → euint64 transferred external

Similar to confidentialTransferFrom but with a callback to to after the transfer.

confidentialTransferFromAndCall(address from, address to, euint64 amount, bytes data) → euint64 transferred external

Similar to confidentialTransferFrom but with a callback to to after the transfer.

OperatorSet(address indexed holder, address indexed operator, uint48 until) event

Emitted when the expiration timestamp for an operator operator is updated for a given holder. The operator may move any amount of tokens on behalf of the holder until the timestamp until.

ConfidentialTransfer(address indexed from, address indexed to, euint64 indexed amount) event

Emitted when a confidential transfer is made from from to to of encrypted amount amount.

EncryptedAmountDisclosed(euint64 indexed encryptedAmount, uint64 amount) event

Emitted when an encrypted amount is disclosed.

Accounts with access to the encrypted amount encryptedAmount that is also accessible to this contract should be able to disclose the amount. This functionality is implementation specific.

IConfidentialFungibleTokenReceiver

import "@openzeppelin/confidential-contracts/interfaces/IConfidentialFungibleTokenReceiver.sol";

Interface for contracts that can receive confidential token transfers with a callback.

Functions
  • onConfidentialTransferReceived(operator, from, amount, data)

onConfidentialTransferReceived(address operator, address from, euint64 amount, bytes data) → ebool external

Called upon receiving a confidential token transfer. Returns an encrypted boolean indicating success of the callback. If false is returned, the transfer must be reversed.