es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Tiene sentido gestionar el equilibrio manualmente dentro del smartcontract?

Estoy usando Solidity para desplegar un contrato inteligente en una red Ethereum de prueba lanzada por Ganache. He leído algo de código de demostración del contrato y uno de ellos se ve así:

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.4;
pragma experimental ABIEncoderV2;

contract Ledger {
    struct TransferRequest {
        string title;
        uint256 amount;
        string bsb;
        string accountName;
        string accountNumber;
    }

    mapping(address => uint256) balances;

    address payable owner;

    event Transfered(bool _success, address _from, address _to, uint256 amount);

    constructor() payable {
        owner = payable(msg.sender);
        balances[tx.origin] = 10000;
    }

    function sendCoin(address payable receiver, uint256 amount)
        payable public
    {
        require(msg.sender == owner);
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Transfered(true, msg.sender, receiver, amount);
    }

    function getBalance(address addr) public view returns (uint256) {
        return balances[addr];
    }
}

Como se puede ver arriba, el contrato administra el balance por sí mismo en lugar de utilizar el balance de la cadena de bloques. No hay ninguna transferencia real de éter dentro del método sendCoin. ¿Qué significa esto? ¿Significa que no hay transacción real en la cadena de bloques? Entonces, ¿cuál es el punto de construir un contrato así? ¿Cuál sería la relación entre el balance administrado por la cadena de bloques y el balance administrado por el contrato?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este contrato en realidad no realiza una transferencia de ether cuando se llama sendCoin, pero eso no significa que no haya una transacción real en la cadena de bloques. El mapeo balances mantiene la cantidad de ether que cada dirección tiene, según lo gestionado por el contrato inteligente. Cuando se llama sendCoin, se actualiza el mapeo balances, lo que, en última instancia, actualiza el estado de la cadena de bloques.

    De esta manera, la relación entre el balance gestionado por la cadena de bloques y el balance gestionado por el contrato es que este último es un subconjunto del primero. El mapeo de balances del contrato es esencialmente una caché del balance actual para cada dirección en el sistema. Cuando un usuario desea enviar ether a otra dirección, se incluirá una transacción en la cadena de bloques que llama al método sendCoin, que a su vez actualiza el mapeo balances, y finalmente actualiza el estado de la cadena de bloques al comprometer los nuevos datos de balances en el libro mayor de la cadena de bloques.

    El objetivo de construir un contrato como este es permitir que se realice una lógica más compleja sobre la funcionalidad básica de la cadena de bloques. El contrato Ledger se puede extender o modificar para realizar operaciones adicionales, como llevar un registro de transacciones o hacer cumplir los controles de acceso. Además, al gestionar los balances internamente, el contrato puede proporcionar un control más detallado sobre cómo se transfieren y almacenan los éteres dentro del sistema.

Comments are closed.