Este contrato implementa a troca de Real Tokenizado entre dois participantes distintos.
A troca destrói Real Tokenizado do cliente pagador, transfere Real Digital do participante pagador para o participante recebedor e emite Real Tokenizado para o cliente recebedor.
A operação de swap implementada neste contrato é realizada em duas transações: uma de proposta e outra de aceite.
Este contrato parte da premissa que o participante pagador já aprovou a movimentação de Real Digital e Real Tokenizado pelo contrato usando o método approve do ERC20.
contract RealDigital CBDC
Referência ao contrato para que seja efetuada a movimentação de Real Digital.
enum SwapStatus {
PENDING, // Operação de _swap_ registrada, pendente de cancelamento ou execução.
EXECUTED, // Operação de _swap_ executada.
CANCELLED // Operação de _swap_ cancelada.
}
Enumeração com as possíveis situações de uma operação de swap.
struct SwapProposal {
contract RealTokenizado tokenSender; // O endereço do contrato de Real Tokenizado do participante pagador
contract RealTokenizado tokenReceiver; // O endereço do contrato de Real Tokenizado do participante recebedor
address sender; // O endereço da wallet do cliente pagador
address receiver; // O endereço da wallet do cliente recebedor
uint256 amount; // Quantidade de Reais a ser movimentada.
enum SwapTwoSteps.SwapStatus status; // Situação atual da operação.
uint256 timestamp;
}
mapping(uint256 => struct SwapTwoSteps.SwapProposal) swapProposals
Mapping de propostas de swap.
event SwapStarted(uint256 indexed proposalId, uint256 indexed senderNumber, uint256 indexed receiverNumber, address sender, address receiver, uint256 amount)
Evento de início do swap.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
senderNumber | uint256 | CNPJ8 do pagador |
receiverNumber | uint256 | CNPJ8 do recebedor |
sender | address | Endereço do pagador |
receiver | address | Endereço do recebedor |
amount | uint256 | Valor |
event SwapExecuted(uint256 indexed proposalId, uint256 indexed senderNumber, uint256 indexed receiverNumber, address sender, address receiver, uint256 amount)
Evento de swap executado.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
senderNumber | uint256 | CNPJ8 do pagador |
receiverNumber | uint256 | CNPJ8 do recebedor |
sender | address | Endereço do pagador |
receiver | address | Endereço do recebedor |
amount | uint256 | Valor |
event SwapCancelled(uint256 indexed proposalId, string reason)
Evento de swap cancelado.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
reason | string | Razão do cancelamento |
event ExpiredProposal(uint256 indexed proposalId)
Evento de proposta expirada. A proposta expira em 1 minuto.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
constructor(address _admin, address _authority, contract RealDigital _CBDC) public
Construtor
Name | Type | Description |
---|---|---|
_admin | address | Administrador do contrato, pode trocar a autoridade do contrato caso seja necessário |
_authority | address | Autoridade do contrato, pode fazer todas as operações com o token |
_CBDC | contract RealDigital | Endereço do contrato do Real Digital |
function startSwap(contract RealTokenizado tokenSender, contract RealTokenizado tokenReceiver, address receiver, uint256 amount) public
Cria a proposta de swap.
Name | Type | Description |
---|---|---|
tokenSender | contract RealTokenizado | Endereço do contrato de Real Tokenizado do pagador |
tokenReceiver | contract RealTokenizado | Endereço do contrato de Real Tokenizado do recebedor |
receiver | address | Endereço do cliente recebedor |
amount | uint256 | Valor |
function executeSwap(uint256 proposalId) public
Aceita a proposta de swap, executável apenas pelo recebedor.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
function cancelSwap(uint256 proposalId, string reason) public
Cancela a proposta. Pode ser executada tanto pelo pagador quanto pelo recebedor.
Name | Type | Description |
---|---|---|
proposalId | uint256 | Id da proposta |
reason | string | Razão do cancelamento |