Solidez
// Agregue estas variables de estado a su contrato
mapeo (dirección => uint256) public SyntheticBalance;
uint256 público totalSyntheticSupply;
En el fragmento de arriba:
syntheticBalance
es un mapeo que realiza un seguimiento del saldo de activos sintéticos para cada dirección.totalSyntheticSupply
es una variable que realiza un seguimiento de la oferta total de activos sintéticos en circulación.Solidity
// Actualiza la función mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
En la función mintSyntheticAsset
:
require
verifica si hay garantía suficiente para acuñar la cantidad solicitada de activos sintéticos.syntheticBalance
de la persona que llama (msg.sender
) aumenta en _amount
.totalSyntheticSupply
también aumenta en _amount
.collateral
se reduce en _amount
ya que se utiliza para respaldar los activos sintéticos recién acuñados.Solidez
// Actualiza la función canjearSyntheticAsset
función canjearSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
En la función redeemSyntheticAsset
:
require
verifica si la persona que llama tiene un saldo suficiente de activos sintéticos para canjear.syntheticBalance
de la persona que llama se reduce en _amount
.totalSyntheticSupply
se reduce en _amount
.collateral
aumenta en _amount
a medida que se libera tras el reembolso de activos sintéticos.TypeScript
// Identificador de licencia SPDX: solidez pragma del MIT
^0.8.0;
contrato SyntheticAsset {
uint256 público subyacenteAssetPrice;
uint256 garantía pública;
dirección pública titular;
mapeo (dirección => uint256) balance sintético público;
uint256 público totalSyntheticSupply;
constructor() {
owner = msg.sender;
}
modificador onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
función updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
función depositColateral(uint256 _amount) public {
collateral += _amount;
}
función retiroColateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
función getSyntheticAssetPrice() vista pública devuelve (uint256) {
return underlyingAssetPrice;
}
función mintSyntheticAsset(uint256 _amount) pública {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
función canjearSyntheticAsset(uint256 _amount) pública {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Para implementar contratos en Goerli Testnet, necesitará Goerli ETH (GoerliETH). Si bien no tiene ningún valor real, es esencial para pagar las tarifas del gas en la red de prueba.
Metamask: asegúrese de que su Metamask esté cambiada a la red de prueba de Goerli.
Vaya al grifo de Goerli para solicitar GoerliETH. Simplemente pegue su dirección Goerli Testnet Ethereum y debería recibir el ETH de prueba en breve.
En Remix, navegue hasta la pestaña Deploy & Run Transactions
.
Para la opción Environment
, seleccione Injected Provider
. Esta opción permite que Remix se conecte a cualquier red en la que esté configurado actualmente su Metamask, que debería ser Goerli Testnet.
Asegúrese de que su contrato, OracleIntegratedContract
, esté seleccionado en el menú desplegable Contract
.
Para el menú desplegable Account
, debería ver su dirección Goerli Testnet Ethereum.
Ahora, con las funcionalidades actualizadas implementadas, compile e implemente su contrato siguiendo los pasos de la Lección 3.
Con el contrato ampliado desplegado:
Llame a las funciones mintSyntheticAsset
y redeemSyntheticAsset
con diferentes cantidades para acuñar y canjear activos sintéticos respectivamente.
Observe los cambios en syntheticBalance
, totalSyntheticSupply
y collateral
a través de la interfaz Remix IDE.
Participe en el contrato y observe cómo las variables de estado y el estado general del contrato evolucionan con sus interacciones. Esta experiencia práctica solidificará los conceptos y operaciones de los activos sintéticos.
A medida que enriquecemos nuestro contrato con funcionalidades esenciales, nos acercamos cada vez más a un contrato de activos sintéticos realista. En la próxima lección, nos centraremos en probar este contrato para garantizar que funcione según lo previsto en varios escenarios. La comprensión práctica de los activos sintéticos continúa profundizándose a medida que avanzamos. ¡Estén atentos para más aprendizaje práctico en la próxima lección!
Solidez
// Agregue estas variables de estado a su contrato
mapeo (dirección => uint256) public SyntheticBalance;
uint256 público totalSyntheticSupply;
En el fragmento de arriba:
syntheticBalance
es un mapeo que realiza un seguimiento del saldo de activos sintéticos para cada dirección.totalSyntheticSupply
es una variable que realiza un seguimiento de la oferta total de activos sintéticos en circulación.Solidity
// Actualiza la función mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
En la función mintSyntheticAsset
:
require
verifica si hay garantía suficiente para acuñar la cantidad solicitada de activos sintéticos.syntheticBalance
de la persona que llama (msg.sender
) aumenta en _amount
.totalSyntheticSupply
también aumenta en _amount
.collateral
se reduce en _amount
ya que se utiliza para respaldar los activos sintéticos recién acuñados.Solidez
// Actualiza la función canjearSyntheticAsset
función canjearSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
En la función redeemSyntheticAsset
:
require
verifica si la persona que llama tiene un saldo suficiente de activos sintéticos para canjear.syntheticBalance
de la persona que llama se reduce en _amount
.totalSyntheticSupply
se reduce en _amount
.collateral
aumenta en _amount
a medida que se libera tras el reembolso de activos sintéticos.TypeScript
// Identificador de licencia SPDX: solidez pragma del MIT
^0.8.0;
contrato SyntheticAsset {
uint256 público subyacenteAssetPrice;
uint256 garantía pública;
dirección pública titular;
mapeo (dirección => uint256) balance sintético público;
uint256 público totalSyntheticSupply;
constructor() {
owner = msg.sender;
}
modificador onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
función updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
función depositColateral(uint256 _amount) public {
collateral += _amount;
}
función retiroColateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
función getSyntheticAssetPrice() vista pública devuelve (uint256) {
return underlyingAssetPrice;
}
función mintSyntheticAsset(uint256 _amount) pública {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
función canjearSyntheticAsset(uint256 _amount) pública {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Para implementar contratos en Goerli Testnet, necesitará Goerli ETH (GoerliETH). Si bien no tiene ningún valor real, es esencial para pagar las tarifas del gas en la red de prueba.
Metamask: asegúrese de que su Metamask esté cambiada a la red de prueba de Goerli.
Vaya al grifo de Goerli para solicitar GoerliETH. Simplemente pegue su dirección Goerli Testnet Ethereum y debería recibir el ETH de prueba en breve.
En Remix, navegue hasta la pestaña Deploy & Run Transactions
.
Para la opción Environment
, seleccione Injected Provider
. Esta opción permite que Remix se conecte a cualquier red en la que esté configurado actualmente su Metamask, que debería ser Goerli Testnet.
Asegúrese de que su contrato, OracleIntegratedContract
, esté seleccionado en el menú desplegable Contract
.
Para el menú desplegable Account
, debería ver su dirección Goerli Testnet Ethereum.
Ahora, con las funcionalidades actualizadas implementadas, compile e implemente su contrato siguiendo los pasos de la Lección 3.
Con el contrato ampliado desplegado:
Llame a las funciones mintSyntheticAsset
y redeemSyntheticAsset
con diferentes cantidades para acuñar y canjear activos sintéticos respectivamente.
Observe los cambios en syntheticBalance
, totalSyntheticSupply
y collateral
a través de la interfaz Remix IDE.
Participe en el contrato y observe cómo las variables de estado y el estado general del contrato evolucionan con sus interacciones. Esta experiencia práctica solidificará los conceptos y operaciones de los activos sintéticos.
A medida que enriquecemos nuestro contrato con funcionalidades esenciales, nos acercamos cada vez más a un contrato de activos sintéticos realista. En la próxima lección, nos centraremos en probar este contrato para garantizar que funcione según lo previsto en varios escenarios. La comprensión práctica de los activos sintéticos continúa profundizándose a medida que avanzamos. ¡Estén atentos para más aprendizaje práctico en la próxima lección!