Despliegue y ejecución

El módulo Deploy & Run sirve para enviar transacciones al Entorno actual.

Para el despliegue, necesita tener un contrato compilado. Para comprobar que existe un contrato compilado, busque la casilla de selección CONTRATO (que se encuentra bajo el campo de entrada VALOR), puede utilizar este módulo.

Si no hay nada, necesita compilar un archivo. Si no ve el contrato que desea, tiene que seleccionar un contrato en el editor para que se active.

Medio ambiente

  • Remix VM (Merge) : Se conecta a una blockchain sandbox en el navegador. La Remix VM (antes llamada JavaScript VM) es su propia «blockchain» y en cada recarga se borrará la cadena antigua y se iniciará una nueva blockchain. La antigua no se guardará. Fusión se refiere a la bifurcación de Ethereum cuando se produjo la Fusión. Esta bifurcación también se conoce como la bifurcación París.

  • Remix VM (London) : Igual que la anterior, salvo que esta cadena utiliza la bifurcación London de Ethereum.

  • Remix VM (Berlin) : Igual que la anterior, salvo que esta cadena utiliza la bifurcación Berlin de Ethereum.

  • Remix VM - Mainnet fork : Esto bifurcará la mainnet de Ethereum y la cargará en la Remix VM. Es útil para desarrollar contratos que necesiten acceder a contratos mainnet desplegados. (Véase más abajo para más información sobre la bifurcación)

  • Remix VM - Goerli fork : Igual que el anterior, excepto que éste bifurca la red de pruebas Goerli. (Ver más abajo para más información sobre Forking)

  • Remix VM - Sepolia fork : Igual que el anterior, excepto que éste bifurca la red de pruebas de Sepolia. (Ver más abajo para más información sobre Forking)

  • Remix VM - Custom fork : bifurca una cadena, en número de bloque, y en una versión de EVM de su elección. (Véase más abajo para más información sobre la bifurcación)

  • Proveedor inyectado - nombre del proveedor: Conecta Remix a un proveedor web3 inyectado. El proveedor inyectado más común es Metamask.

  • Personalizado - Proveedor HTTP externo: Remix se conectará a un nodo remoto. Deberá proporcionar la URL del proveedor seleccionado: geth, parity o cualquier cliente Ethereum. Anteriormente se denominaba Proveedor Web3. (Vea más abajo para más información sobre el Proveedor HTTP Externo)

  • Dev - Proveedor de Hardhat: Conecta Remix a una cadena de pruebas Hardhat local.

  • Dev - Proveedor de Ganache: Conecta Remix a una cadena local de pruebas Truffle Ganache.

  • Dev - Proveedor de Foundry: Conecta Remix a una cadena de pruebas local de Foundry Anvil.

  • L2 - Proveedor de Optimismo: Conecta Remix a un proveedor inyectado (normalmente Metamask) con la configuración para la red principal de Optimism.

  • L2 - Proveedor Arbitrum One: Conecta Remix a un proveedor inyectado (normalmente Metamask) con la configuración para la red Arbitrum One.

  • WalletConnect: Conecta Remix a un monedero en un dispositivo móvil.

Bifurcación de cadenas en Remix

La bifurcación es una gran técnica para desarrollar un contrato que interactúe con los contratos desplegados en una cadena específica. Al introducir una cadena en la Remix VM, tendrá las 10 cuentas cargadas con 100ETH.

Pero cuidado, si actualiza el navegador, perderá la cadena bifurcada.

Horquilla a medida

La opción de bifurcación personalizada le permite especificar el servidor RPC de una cadena, un número de bloque y una versión de EVM.

Puede obtener la URL del nodo en chainlist.org. Si la cadena no se carga, es posible que tenga que elegir un servidor RPC diferente. También tendrá que elegir una versión de EVM adecuada al número de bloque. Así, si elige un número de bloque muy bajo, el EVM con el «sabor» Merge no funcionará porque esta versión del EVM salió más tarde.

Más información sobre el proveedor HTTP externo

Si utiliza Geth y https://remix.ethereum.org, utilice el siguiente comando de Geth para permitir las peticiones de Remix:

geth --http --http.corsdomain https://remix.ethereum.org

Véase también Docs de Geth sobre el servidor http

Para ejecutar Remix utilizando https://remix.ethereum.org y un nodo de prueba local, utilice este comando Geth:

geth --http --http.corsdomain="https://remix.ethereum.org" --http.api web3,eth,debug,personal,net --vmdebug --datadir <path/to/local/folder/for/test/chain> --dev console

Si está utilizando remix-alpha o una versión local de remix - sustituya la url del –http.corsdomain por la url de Remix que esté utilizando.

Para ejecutar Remix Desktop & un nodo de prueba local, utilice este comando Geth:

geth --http --http.corsdomain="package://a7df6d3c223593f3550b35e90d7b0b1f.mod" --http.api web3,eth,debug,personal,net --vmdebug --datadir <path/to/local/folder/for/test/chain> --dev console

Consulte también Geth Docs on Dev mode

El punto final del proveedor Web3 para un nodo local es http://localhost:8545


ADVERTENCIA: No sea perezoso. Es una mala idea utilizar la bandera Geth –http.corsdomain con un comodín: --http.corsdomain *

Si pone el comodín *, significa que todo el mundo puede solicitar el nodo. Mientras que si pone una URL, restringe las urls sólo a esa - por ejemplo --http.corsdomain 'https://remix-alpha.ethereum.org'.

Sólo utilice --http.corsdomain * cuando utilice una cadena de prueba Y utilizando sólo cuentas de prueba. Para cuentas reales o en la cadena principal especifique la url.


Cuenta:

  • Cuenta: la lista de cuentas asociadas al entorno actual (y sus saldos asociados). En la Remix VM, puede elegir entre 5 cuentas. Si utiliza Injected Web3 con MetaMask, deberá cambiar la cuenta en MetaMask.

Límite de gas:

  • Esto fija la cantidad máxima de gas que se permitirá para todas las transacciones creadas en Remix.

Valor:

  • Establece la cantidad de ETH, WEI, GWEI, etc. que se envía a un contrato o a una función pagadera.
    Nota: las funciones pagaderas tienen un botón rojo.

El campo Valor se pone siempre a 0 después de cada ejecución de transacción.
El campo Valor es NO para el gas.

Despliegue y AtAddress

  • En la imagen de arriba, el cuadro de selección está configurado como Baloto. Este cuadro de selección contendrá la lista de contratos compilados.

  • Deploy envía una transacción que despliega el contrato seleccionado. Cuando se extraiga la transacción, se añadirá la instancia recién creada (esto puede tardar varios segundos).
    Nota: Si la función constructora del contrato tiene parámetros, deberá especificarlos.

  • At Address se utiliza para acceder a un contrato que ya ha sido desplegado. Como el contrato ya está desplegado, acceder a un contrato con AtAddress no cuesta gas.

Nota: Cuando utilice AtAddress, asegúrese de que confía en el contrato de esa dirección.

To use AtAddress, you need to have the source code or ABI of the deployed contract in the active tab of the editor. When using the source code, it must be compiled with the same compilation settings as the deployed contract that you are trying to access.

Uso de la ABI con AtAddress

El ABI es una matriz JSON que describe la interfaz del contrato.

Para interactuar con un contrato utilizando la ABI, cree un nuevo archivo en Remix con extensión *.abi y copie en él el contenido de la ABI.

Asegúrese de que este archivo es la pestaña activa en el editor. A continuación, en el campo situado junto a «En la dirección», introduzca la dirección del contrato y haga clic en «En la dirección». Si tiene éxito, aparecerá una instancia del contrato a continuación, en la lista de Contratos desplegados.

Nota: Para generar la ABI, en el compilador Solidity, después de compilar un contrato, haga clic en el botón Detalles de compilación. Aparecerá un modal que contiene la ABI entre otra información.

Instancias pendientes

La validación de una transacción tarda varios segundos. Durante este tiempo, la interfaz gráfica de usuario la muestra en modo pendiente. Cuando la transacción es minada, el número de transacciones pendientes se actualiza y la transacción se añade al registro (ver terminal).

Uso de la grabadora

El grabador es una herramienta que se utiliza para guardar un grupo de transacciones en un archivo JSON y volver a ejecutarlas más tarde, ya sea en el mismo entorno o en otro.

Saving to the JSON file (by default it’s called scenario.json) allows one to easily check the transaction list, tweak input parameters, change linked library, etc…

Hay muchos casos de uso para la grabadora.

Por ejemplo:

  • Después de haber codificado y probado los contratos en un entorno restringido (como la Remix VM), podría cambiar el entorno y volver a desplegarlo en un entorno más realista como una red de pruebas pública o en un nodo Geth. Al utilizar el archivo scenario.json generado, estará utilizando todos los mismos ajustes que utilizó en la Remix VM. Y esto significa que no necesitará hacer clic en la interfaz 100 veces o lo que sea para obtener el estado que consiguió originalmente. Así que la grabadora podría ser una herramienta para proteger su cordura.

    También puede cambiar los ajustes del archivo scenario.json para personalizar la reproducción.

  • El despliegue de un contrato suele requerir más que la creación de una transacción, por lo que el registrador automatizará este despliegue.

  • Working in a dev environment often requires setting up the state in the first place.

Cuando está marcada, la opción Ejecutar transacciones utilizando el último resultado de compilación le permite desarrollar un contrato y establecer fácilmente el estado utilizando las últimas versiones compiladas de los contratos.

escenario.json

Para crear este archivo en el registrador, primero necesita, por supuesto, haber ejecutado algunas transacciones. En la imagen de arriba - tiene un 0 al lado de Transacciones Registradas. Así que este no es el momento adecuado para grabar transacciones porque - bueno porque no hay ninguna. Cada vez que realice una transacción, ese número se incrementará. Entonces, cuando esté listo, haga clic en el icono del disquete y se creará el archivo scenario.json.

El siguiente archivo JSON es un ejemplo del archivo scenario.json.

En él se ejecutan 3 transacciones:

La primera corresponde al despliegue de la lib testLib.

El segundo corresponde al despliegue del contrato test con el primer parámetro del constructor fijado en 11. Ese contrato depende de una biblioteca. La vinculación se realiza mediante la propiedad linkReferences. En ese caso utilizamos la dirección de la biblioteca creada previamente: created{1512830014773}. El número es el id (marca de tiempo) de la transacción que llevó a la creación de la biblioteca.

El tercer registro corresponde a la llamada a la función set del contrato test (la propiedad to se establece en: created{1512830015080}) . Los parámetros de entrada son 1 y 0xca35b7d915458ef540ade6068dfe2f44e8fa733c.

Todas estas transacciones se crean utilizando el valor de la cuenta account{0}.

{
"accounts": {
    "account{0}": "0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
},
"linkReferences": {
    "testLib": "created{1512830014773}"
},
"transactions": [
    {
    "timestamp": 1512830014773,
    "record": {
        "value": "0",
        "parameters": [],
        "abi": "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a",
        "contractName": "testLib",
        "bytecode": "60606040523415600e57600080fd5b60968061001c6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636d4ce63c146044575b600080fd5b604a6060565b6040518082815260200191505060405180910390f35b6000610d809050905600a165627a7a7230582022d123b15248b8176151f8d45c2dc132063bcc9bb8d5cd652aea7efae362c8050029",
        "linkReferences": {},
        "type": "constructor",
        "from": "account{0}"
    }
    },
    {
    "timestamp": 1512830015080,
    "record": {
        "value": "100",
        "parameters": [
        11
        ],
        "abi": "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec",
        "contractName": "test",
        "bytecode": "60606040526040516020806102b183398101604052808051906020019091905050806000819055505061027a806100376000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632f30c6f61461006757806338cc48311461009e57806362738998146100f357806387cc10e11461011c575b600080fd5b61009c600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610145565b005b34156100a957600080fd5b6100b1610191565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100fe57600080fd5b6101066101bb565b6040518082815260200191505060405180910390f35b341561012757600080fd5b61012f6101c4565b6040518082815260200191505060405180910390f35b8160008190555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905090565b600073__browser/ballot.sol:testLib____________636d4ce63c6000604051602001526040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b151561022e57600080fd5b6102c65a03f4151561023f57600080fd5b505050604051805190509050905600a165627a7a72305820e0b2510bb2890a0334bfe5613d96db3e72442e63b514cdeaee8fc2c6bbd19d3a0029",
        "linkReferences": {
        "browser/ballot.sol": {
            "testLib": [
            {
                "length": 20,
                "start": 511
            }
            ]
        }
        },
        "name": "",
        "type": "constructor",
        "from": "account{0}"
    }
    },
    {
    "timestamp": 1512830034180,
    "record": {
        "value": "1000000000000000000",
        "parameters": [
        1,
        "0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
        ],
        "to": "created{1512830015080}",
        "abi": "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec",
        "name": "set",
        "type": "function",
        "from": "account{0}"
    }
    }
],
"abis": {
    "0xbc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a": [
    {
        "constant": true,
        "inputs": [],
        "name": "get",
        "outputs": [
        {
            "name": "",
            "type": "uint256"
        }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }
    ],
    "0xc41589e7559804ea4a2080dad19d876a024ccb05117835447d72ce08c1d020ec": [
    {
        "constant": true,
        "inputs": [],
        "name": "getInt",
        "outputs": [
        {
            "name": "",
            "type": "uint256"
        }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getFromLib",
        "outputs": [
        {
            "name": "",
            "type": "uint256"
        }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getAddress",
        "outputs": [
        {
            "name": "",
            "type": "address"
        }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
        {
            "name": "_t",
            "type": "uint256"
        },
        {
            "name": "_add",
            "type": "address"
        }
        ],
        "name": "set",
        "outputs": [],
        "payable": true,
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
        {
            "name": "_r",
            "type": "uint256"
        }
        ],
        "payable": true,
        "stateMutability": "payable",
        "type": "constructor"
    }
    ]
}
}