Solidity
// Adicione essas variáveis de estado ao seu contrato
mapeamento(address => uint256) public SyntheticBalance;
uint256 público totalSyntheticSupply;
No trecho acima:
syntheticBalance
é um mapeamento que acompanha o saldo dos ativos sintéticos para cada endereço.totalSyntheticSupply
é uma variável que acompanha a oferta total de ativos sintéticos em circulação.Solidez
// Atualizar mintSyntheticAsset function
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
Na função mintSyntheticAsset
:
require
verifica se há garantias suficientes para cunhar a quantidade solicitada de ativos sintéticos.syntheticBalance
do chamador (msg.sender
) é aumentado em _amount
.totalSyntheticSupply
também é aumentado em _amount
.collateral
é reduzida em _amount
, uma vez que é utilizada para garantir os activos sintéticos recentemente emitidos.Solidez
// Atualizar redeemSyntheticAsset function
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
Na função redeemSyntheticAsset
:
require
verifica se o chamador tem saldo suficiente de ativos sintéticos para resgatar.syntheticBalance
do chamador é diminuído em _amount
.totalSyntheticSupply
é diminuído em _amount
.collateral
é aumentada em _amount
à medida que é liberada no resgate de ativos sintéticos.TypeScript
// Identificador de licença SPDX: solidez do pragma do MIT
^0.8.0;
contrato SyntheticAsset {
uint256 public subjacenteAssetPrice;
uint256 garantias públicas;
endereço proprietário público;
mapeamento (endereço => uint256) público sintéticoBalance;
uint256 público totalSyntheticSupply;
construtor() {
owner = msg.sender;
}
modificador onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
função updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
função depositCollateral(uint256 _amount) public {
collateral += _amount;
}
função retirarCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
função getSyntheticAssetPrice() retornos de visualização pública (uint256) {
return underlyingAssetPrice;
}
função mintSyntheticAsset (uint256 _amount) público {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
função redeemSyntheticAsset (uint256 _amount) público {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Para implantar contratos no Goerli Testnet, você precisará do Goerli ETH (GoerliETH). Embora não tenha nenhum valor real, é essencial para pagar taxas de gás na testnet.
Metamask: Certifique-se de que seu Metamask esteja migrado para a Goerli Test Network.
Vá até a torneira Goerli para solicitar um pouco de GoerliETH. Basta colar seu endereço Goerli Testnet Ethereum e você receberá o ETH de teste em breve.
No Remix, navegue até a guia Deploy & Run Transactions
.
Para a opção Environment
, selecione Injected Provider
. Esta opção permite que o Remix se conecte a qualquer rede para a qual seu Metamask esteja atualmente configurado, que deve ser Goerli Testnet.
Certifique-se de que seu contrato, OracleIntegratedContract
, esteja selecionado no menu suspenso Contract
.
No menu suspenso Account
, você deverá ver seu endereço Goerli Testnet Ethereum.
Agora com as funcionalidades atualizadas implementadas, compile e implemente seu contrato seguindo as etapas da Lição 3.
Com o contrato estendido implantado:
Chame as funções mintSyntheticAsset
e redeemSyntheticAsset
com valores diferentes para cunhar e resgatar ativos sintéticos, respectivamente.
Observe as alterações em syntheticBalance
, totalSyntheticSupply
e collateral
por meio da interface Remix IDE.
Envolva-se com o contrato e observe como as variáveis de estado e o estado geral do contrato evoluem com suas interações. Esta experiência prática solidificará os conceitos e operações de ativos sintéticos.
À medida que enriquecemos o nosso contrato com funcionalidades essenciais, aproximamo-nos cada vez mais de um contrato realista de ativos sintéticos. Na próxima lição, nos concentraremos em testar esse contrato para garantir que ele funcione conforme planejado em vários cenários. A compreensão prática dos activos sintéticos continua a aprofundar-se à medida que avançamos. Fique ligado para mais aprendizado prático na próxima lição!
Solidity
// Adicione essas variáveis de estado ao seu contrato
mapeamento(address => uint256) public SyntheticBalance;
uint256 público totalSyntheticSupply;
No trecho acima:
syntheticBalance
é um mapeamento que acompanha o saldo dos ativos sintéticos para cada endereço.totalSyntheticSupply
é uma variável que acompanha a oferta total de ativos sintéticos em circulação.Solidez
// Atualizar mintSyntheticAsset function
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
Na função mintSyntheticAsset
:
require
verifica se há garantias suficientes para cunhar a quantidade solicitada de ativos sintéticos.syntheticBalance
do chamador (msg.sender
) é aumentado em _amount
.totalSyntheticSupply
também é aumentado em _amount
.collateral
é reduzida em _amount
, uma vez que é utilizada para garantir os activos sintéticos recentemente emitidos.Solidez
// Atualizar redeemSyntheticAsset function
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
Na função redeemSyntheticAsset
:
require
verifica se o chamador tem saldo suficiente de ativos sintéticos para resgatar.syntheticBalance
do chamador é diminuído em _amount
.totalSyntheticSupply
é diminuído em _amount
.collateral
é aumentada em _amount
à medida que é liberada no resgate de ativos sintéticos.TypeScript
// Identificador de licença SPDX: solidez do pragma do MIT
^0.8.0;
contrato SyntheticAsset {
uint256 public subjacenteAssetPrice;
uint256 garantias públicas;
endereço proprietário público;
mapeamento (endereço => uint256) público sintéticoBalance;
uint256 público totalSyntheticSupply;
construtor() {
owner = msg.sender;
}
modificador onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
função updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
função depositCollateral(uint256 _amount) public {
collateral += _amount;
}
função retirarCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
função getSyntheticAssetPrice() retornos de visualização pública (uint256) {
return underlyingAssetPrice;
}
função mintSyntheticAsset (uint256 _amount) público {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
função redeemSyntheticAsset (uint256 _amount) público {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Para implantar contratos no Goerli Testnet, você precisará do Goerli ETH (GoerliETH). Embora não tenha nenhum valor real, é essencial para pagar taxas de gás na testnet.
Metamask: Certifique-se de que seu Metamask esteja migrado para a Goerli Test Network.
Vá até a torneira Goerli para solicitar um pouco de GoerliETH. Basta colar seu endereço Goerli Testnet Ethereum e você receberá o ETH de teste em breve.
No Remix, navegue até a guia Deploy & Run Transactions
.
Para a opção Environment
, selecione Injected Provider
. Esta opção permite que o Remix se conecte a qualquer rede para a qual seu Metamask esteja atualmente configurado, que deve ser Goerli Testnet.
Certifique-se de que seu contrato, OracleIntegratedContract
, esteja selecionado no menu suspenso Contract
.
No menu suspenso Account
, você deverá ver seu endereço Goerli Testnet Ethereum.
Agora com as funcionalidades atualizadas implementadas, compile e implemente seu contrato seguindo as etapas da Lição 3.
Com o contrato estendido implantado:
Chame as funções mintSyntheticAsset
e redeemSyntheticAsset
com valores diferentes para cunhar e resgatar ativos sintéticos, respectivamente.
Observe as alterações em syntheticBalance
, totalSyntheticSupply
e collateral
por meio da interface Remix IDE.
Envolva-se com o contrato e observe como as variáveis de estado e o estado geral do contrato evoluem com suas interações. Esta experiência prática solidificará os conceitos e operações de ativos sintéticos.
À medida que enriquecemos o nosso contrato com funcionalidades essenciais, aproximamo-nos cada vez mais de um contrato realista de ativos sintéticos. Na próxima lição, nos concentraremos em testar esse contrato para garantir que ele funcione conforme planejado em vários cenários. A compreensão prática dos activos sintéticos continua a aprofundar-se à medida que avançamos. Fique ligado para mais aprendizado prático na próxima lição!