Supongamos que tengo este código:
import "github.com/Arachnid/solidity-stringutils/strings.sol";
contract Contract {
using strings for *;
// ...
}
Para esta solidez, el compilador en línea genera este código de bytes:
60606040523415600b57fe5b5b60338060196000396000f30060606040525bfe00a165627a7a723058207a17f097139e731ad961366b8214b226041a3cd4427248c94ea39ee29bafface0029
Aquí no veo ningún marcador de posición para agregar la dirección de la biblioteca. Pero cuando implemento el código de bytes, crea un contrato con éxito.
Entonces, ¿cómo encuentra el compilador en línea solidity la dirección de la biblioteca?
¿Y cómo sabe dónde implementar la biblioteca, es decir, mainnet o testnet? Puedo usar el mismo código de bytes tanto en la red principal como en la red de prueba, pero la dirección de la biblioteca puede ser diferente en ambas redes. También hay redes privadas.
En este caso, la biblioteca de "cadenas" solo tiene funciones con internal
visibilidad, por lo tanto, todas las funciones de la biblioteca se copian en el Contract
contrato, por lo tanto, la biblioteca de "cadenas" nunca se implementó y, por lo tanto, no hay ningún marcador de posición para agregar la dirección de la biblioteca de "cadenas". en el código de bytes de Contract
.
Para saber por qué se copió, lea este http://solidity.readthedocs.io/en/develop/contracts.html#libraries
Supongo que está utilizando https://ethereum.github.io/browser-solidity/ cuando se refiere al "compilador en línea de solidez".
Si ese es el caso, esto es lo que sucede cuando "creas" tu Contract
:
import
una biblioteca a partir de la fuente de github, la compila, la implementa y mantiene la dirección en la memoria.Contract
, y luego vincula el código de bytes resultante a la dirección de la biblioteca.Espero que eso lo aclare. Estoy un poco desactualizado en lo interno del proyecto de solidez del navegador, así que espero no estar desviándote.
prusty narayan
Ardilla roja
prusty narayan
Ardilla roja
prusty narayan
prusty narayan