Solidez
//Adicione estas variáveis de estado ao seu contrato
mapeamento (endereço = > uint256) balanço sintético público;
uint256 fornecimento sintético total público;
No trecho acima:
SyntheticBalance é um mapeamento que acompanha o saldo de 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 a função MintSyntheticAsset
função mintSyntheticAsset (uint256 _amount) pública {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}
Na função MintSyntheticAsset:
exigência verifica se há garantia suficiente para cunhar o valor solicitado de ativos sintéticos.saldo sintético do chamador (msg.sender) é aumentado em TotalSyntheticSupply também é aumentado em garantia é reduzida em _montante uma vez que é usada para apoiar os activos sintéticos recém-cuntados.Solidez
//Atualizar a função RedeemSyntheticAsset
função redeemSyntheticAsset (uint256 _amount) public {
    require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
    syntheticBalance[msg.sender] -= _amount;
    totalSyntheticSupply -= _amount;
    collateral += _amount;
}
Na função RedeemSyntheticAsset:
exigência verifica se o chamador tem um saldo suficiente de ativos sintéticos para resgatar.saldo sintético do chamador é diminuído em Total SyntheticSupply é reduzido em garantia é aumentada em _montante à medida que é liberada de volta após o resgate de ativos sintéticos.TypeScript
//Identificador de licença SPDX: MIT
solidez do pragma ^0.8.0;
contrato SyntheticAsset {
 uint256 preço público do ativo subjacente;
 uint256 garantia pública;
 endereço proprietário público;
 mapeamento (endereço = > uint256) balanço sintético público;
 uint256 fornecimento sintético total público;
 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 vista pública (uint256) {
        return underlyingAssetPrice;
    }
    função mintSyntheticAsset (uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }
    função redeemSyntheticAsset (uint256 _amount) public {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

Para implementar contratos na Goerli Testnet, vai precisar de Goerli ETH (GoerliETH). Embora não tenha nenhum valor real, é essencial para pagar taxas de gás na testnet.
Metamask: Certifique-se de que a sua Metamask está ligada à Rede de Teste Goerli.
Vá à torneira Goerli pedir algum Goerlieth. Basta colar o seu endereço Goerli Testnet Ethereum e deverá receber o teste ETH em breve.

No Remix, navegue até ao separador Implantar & Executar Transações.
Para a opção Ambiente, seleccione Provedor Injectado. Esta opção permite que o Remix ligue-se a qualquer rede para a qual a sua Metamask esteja configurada atualmente, que deve ser a Goerli Testnet.
Certifique-se de que o seu contrato, OracleIntegratedContract, está selecionado na lista suspensa  Contrato.
Para a lista suspensa Conta, deverá ver o seu endereço Goerli Testnet Ethereum.
Agora com as funcionalidades atualizadas em vigor, compile e implemente o seu contrato seguindo os passos da Lição 3.
Com o contrato alargado implementado:
Chame as funções MintSyntheticAsset e redeemSyntheticAsset com diferentes montantes para cunhar e resgatar ativos sintéticos, respectivamente.
Observe as alterações no SyntheticBalance, TotalSyntheticSupply e colaterais através da interface Remix IDE.
Envolver-se com o contrato e observe como as variáveis de estado e o estado geral do contrato evoluem com as 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 de um contrato realista de ativos sintéticos. Na próxima lição, vamos nos concentrar em testar este contrato para garantir que ele funcione conforme pretendido em vários cenários. A compreensão prática dos ativos sintéticos continua a aprofundar-se à medida que avançamos. Fique ligado para mais aprendizagem prática na próxima lição!