Mucha gente ha expresado su entusiasmo por el potencial del uso del ensamblaje en línea en los contratos inteligentes. Después de ver este comentario en reddit, tengo curiosidad por ver algunos ejemplos básicos (y más avanzados, si lo desea) de cómo se puede usar el ensamblaje en línea para ahorrar gasolina o aumentar la eficiencia.
Como autor de ese módulo, surgieron algunas cosas:
string
y bytes
en una sola operación. Solidity-stringutils usa eso para hacer comparaciones de cadenas muy rápidas restando fragmentos de 32 bytes de las dos cadenas que se comparan. Sin ensamblaje, debe hacer esto byte por byte.sha3
código de operación toma un rango de bytes en la memoria para hacer hash, mientras que la función Solidity del mismo nombre toma una cadena. Por lo tanto, hacer hash de parte de una cadena requeriría costosas operaciones de copia de cadenas. Con el ensamblaje en línea, puede pasar una cadena y hacer hash solo en la parte que le interesa.bytes
o string
, pero si sabe la longitud esperada, puede llamarlos usando el ensamblado en línea.Sé que este es un tema antiguo, pero aquí hay un par de tutoriales que preparé para cubrir el ensamblaje con solidez:
Montaje funcional - https://www.youtube.com/watch?v=nkGN6GwkMzU
Montaje instructivo: https://www.youtube.com/watch?v=axZJ2NFMH5Q
Entro en los beneficios, desventajas, ejemplos y ensamblaje de depuración.
Bueno, por un lado, puede hacer cosas que no puede hacer con el ensamblaje tradicional... un ejemplo perfecto es la nueva configuración de utilidades de cadena de Nick Johnson. https://github.com/Arachnid/solidity-stringutils
La función es bastante nueva, pero lo que sea que le lleve su imaginación y lo que considere útil, puede hacerlo en el ensamblaje en línea según los requisitos de EVM. Incluso hay algo en los documentos al respecto.
http://solidity.readthedocs.org/en/latest/control-structures.html#inline-assembly
VoR0220
nick johnson
nick johnson
VoR0220
nick johnson
VoR0220
Pablo Razvan Berg
RETURNDATASIZE
yRETURNDATACOPY
, podemos consultar el código de un contrato a través de<address>code
, y mucho más .