-
Notifications
You must be signed in to change notification settings - Fork 9
/
RealDigitalDefaultAccount.sol
77 lines (69 loc) · 2.59 KB
/
RealDigitalDefaultAccount.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/AccessControl.sol";
import "./RealDigital.sol";
/**
* @title RealDigitalDefaultAccount
* @dev Contrato que permite aos participantes trocarem sua carteira default.
*/
contract RealDigitalDefaultAccount is AccessControl {
RealDigital private CBDC; // Referência ao contrato do Real Digital para validação de participantes.
address private authority; // Autoridade do contrato. Adiciona carteiras default.
address private admin; // Administrador do contrato. Permite trocar a autoridade.
/**
* @dev Mapping das contas default.
* Chave é o CNPJ8 do participante.
*/
mapping(uint256 => address) private _defaultAccount;
/**
* @dev Modificador de método: somente participantes podem alterar suas carteiras default.
*/
modifier onlyParticipant() {
require(CBDC.verifyAccount(msg.sender), "Must be participant");
_;
}
/**
* @dev Construtor para instanciar o contrato.
* @param token address: Endereço do Real Digital.
* @param _authority address: Autoridade do contrato. Adiciona carteiras default.
* @param _admin address: Administrador do contrato. Permite trocar a autoridade.
*/
constructor(RealDigital token, address _authority, address _admin) {
CBDC = token;
authority = _authority;
admin = _admin;
}
/**
* @dev Adiciona a primeira carteira default para um participante.
* É permitido apenas para a autoridade.
* @param cnpj8 uint256: CNPJ8 do participante.
* @param wallet address: Carteira.
*/
function addDefaultAccount(uint256 cnpj8, address wallet) public {
require(msg.sender == authority, "Must be authority");
_defaultAccount[cnpj8] = wallet;
}
/**
* @dev Permite ao participante trocar sua carteira default.
* @param cnpj8 uint256: CNPJ8 do participante.
* @param newWallet address: Carteira.
*/
function updateDefaultWallet(
uint256 cnpj8,
address newWallet
) public onlyParticipant {
require(
_defaultAccount[cnpj8] == msg.sender,
"Must be current default account"
);
_defaultAccount[cnpj8] = newWallet;
}
/**
* @dev Retorna a carteira default de um participante.
* @param cnpj8 uint256: CNPJ8 do participante.
* @return address Retorna o endereço da carteira default do participante.
*/
function defaultAccount(uint256 cnpj8) public view returns (address) {
return _defaultAccount[cnpj8];
}
}