Despliegue y ejecución (parte 2)
Interacting with deployed contracts
After a contract is deployed or after it is accessed with AtAddress, the deployed instance will appear in the Deploy/Unpinned Contracts section at the bottom of the Deploy & Run panel.
The deployed contract’s address is visible as are a few other icons - one of which is the pin icon.
Pinned contracts
When a contract is pinned, it will jump up to the Pinned Contracts section and Remix will save the contract’s address and the ABI (in the .deploys folder of the current Workspace). When Remix is refreshed, the pinned contracts will be loaded into the Pinned Contracts section.
Pinned contracts are chain & Workspace specific
Because a pinned contract’s address and ABI are stored in a File Explorer Workspace, the same Workspace must be active to see its pinned contracts. Similarly, only the pinned contracts of the currently selected chain will show.
Functions
To see a contract’s functions, click the caret on the left side of the panel.
The functions” buttons can have different colors.
Blue buttons are for
view
orpure
functions. Clicking a blue button does not create a new transaction - so there will be no gas fees.Orange buttons are for
non-payable
functions. Non-payable functions change the state of the contract BUT do not accept value (typically ETH) being sent with the transaction. Clicking an orange button will create a transaction and will cost gas.Red buttons are for
payable
functions. Clicking a red button will create a new transaction and this transaction can accept a value (typically ETH). The amount of value is set in in the Value field which is under the Gas Limit field.
See more information about Solidity modifiers - in the Solidity docs.
Introducción de parámetros
A function has two views - the collapsed and the expanded view, which is visible after clicking the caret on the right side of the panel.
The input box shows the expected type of each parameter.
Los números y las direcciones no necesitan ir entre comillas dobles.
No es necesario envolver las cadenas.
Introducción de parámetros en la vista contraída
In the collapsed view:
Los parámetros están separados por comas.
En el ejemplo anterior, la función «delegar» tiene 3 parámetros.
Introducción de parámetros en la vista ampliada
Clicking the “down” caret brings you to the expanded view - where parameters are input one at a time.
Interacciones de bajo nivel
Las interacciones de bajo nivel se utilizan para enviar fondos o datos de llamada o fondos y datos de llamada a un contrato a través de la función receive() o fallback(). Normalmente, sólo debería necesitar implementar la función fallback si sigue un patrón de actualización o proxy.
La sección de interacciones de bajo nivel se encuentra debajo de las funciones de cada contrato desplegado.
Tenga en cuenta lo siguiente:
Si está ejecutando una transferencia simple de Ether a un contrato, necesita tener la función receive() en su contrato. Si su contrato ha sido desplegado y desea enviarle fondos, introduciría la cantidad de Ether o Wei, etc. (véase A en el gráfico inferior), y a continuación introduciría NADA en el campo calldata de Interacciones de bajo nivel (véase B en el gráfico) y pulsaría el botón Transact (véase C en el gráfico inferior).
Si está enviando calldata a su contrato con Ether, entonces necesita utilizar la función fallback() y tenerla con la mutabilidad de estado de pagable.
Si no está enviando éter al contrato pero está enviando datos de llamada, entonces debe utilizar la función fallback().
Si incumple las normas al utilizar las Interacciones de bajo nivel recibirá una advertencia.
Consulte solidity docs para más detalles sobre el uso de las funciones fallback y receive.
Inputting a tuple or struct to a function
To pass a tuple, you need to put in an array [].
Similarly, to pass in a struct as a parameter of a function, it needs to be put in as an array [].
NOTE: the file’s pragma must be set to: pragma experimental ABIEncoderV2;
Ejemplo de paso de una estructura anidada a una función
Considere una estructura anidada definida así:
struct Garden {
uint slugCount;
uint wormCount;
Flower[] theFlowers;
}
struct Flower {
uint flowerNum;
string color;
}
Si una función tiene la firma fertilizante(memoria jardínparcelajardín)
entonces la sintaxis correcta es:
[1,2,[[3,"Petunia"]]]
Para continuar con este ejemplo, he aquí un modelo de contrato:
pragma solidity >=0.4.22 <0.7.0;
pragma experimental ABIEncoderV2;
contract Sunshine {
struct Garden {
uint slugCount;
uint wormCount;
Flower[] theFlowers;
}
struct Flower {
uint flowerNum;
string color;
}
function fertilizer(Garden memory gardenPlot) public {
uint a = gardenPlot.slugCount;
uint b = gardenPlot.wormCount;
Flower[] memory cFlowers = gardenPlot.theFlowers;
uint d = gardenPlot.theFlowers[0].flowerNum;
string memory e = gardenPlot.theFlowers[0].color;
}
}
Tras compilar, desplegar el contrato y abrir la instancia desplegada, podemos añadir los siguientes parámetros de entrada a la función denominada fertilizante :
[1,2,[[3,"Black-eyed Susan"],[4,"Pansy"]]]
La función fertilizante acepta un único parámetro del tipo Jardín. El tipo Jardín es una estructura. Los structs se envuelven en corchetes. Dentro de Jardín hay una matriz que es una matriz de structs llamada lasFlores. Tiene un conjunto de corchetes para el array y otro conjunto para el struct. De ahí los dobles corchetes.