Solidity
Solidity | ||
---|---|---|
![]() | ||
Desarrollador(es) | ||
Gavin Wood y otros https://soliditylang.org/ | ||
Información general | ||
Apareció en | 2014 | |
Licencia | GPLv3 | |
Solidity es un lenguaje de programación orientado a objetos para escribir contratos inteligentes.[1] Se utiliza para implementar contratos inteligentes [2] en varias plataformas blockchain, la más destacada, Ethereum .[cita requerida] Fue desarrollado por Christian Reitwiessner, Alex Beregszaszi y varios de los principales excolaboradores de Ethereum para poder escribir contratos inteligentes en plataformas blockchain como Ethereum.[3]
Historia
Solidity fue inicialmente propuesto en agosto de 2014 por Gavin Wood. Más tarde, el lenguaje fue desarrollado por el equipo de Solidity de Ethereum Projects, dirigido por Christian Reitwiessner.
Actualmente, Solidity es el principal lenguaje en Ethereum así como en otras blockchains privadas que compiten con Ethereum, como Monax y su Hyperledger Burrow blockchain, la cual utiliza Tendermint para el mecanismo de consenso. SWIFT ha desplegado una prueba de concepto que utiliza Solidity ejecutándose sobre Burrow.
Un investigador de la Universidad de Cornell declaró que Solidity fue parcialmente culpable del hackeo a The DAO en 2016. Dijo: "esto en realidad no era un defecto o una explotación en el contrato de The DAO en sí: técnicamente, la Máquina Virtual Ethereum (EVM) estaba funcionando según lo previsto, pero Solidity estaba introduciendo fallos de seguridad en los contratos que no solo la comunidad pasó por alto, sino que también lo hicieron los propios diseñadores del lenguaje ".[4]
Descripción
Solidity es un lenguaje de programación de tipo estático diseñado para desarrollar contratos inteligentes que se ejecutan en la máquina virtual de ethereum, también conocida como EVM.[5]
Según lo especificado por Wood, está diseñado en torno a la sintaxis ECMAScript para que sea familiar para los desarrolladores web existentes;[cita requerida] la diferencia de ECMAScript, es que tiene tipos de retorno de tipo estático y variable. En comparación con otros lenguajes focalizados en EVM de la época, como Serpent y Mutan, Solidity contenía una serie de diferencias importantes. Soportaba variables miembro complejas para los contratos, incluyendo asignaciones jerárquicas arbitrarias y estructuras de datos . Los contratos admiten herencia, incluyendo herencia múltiple Linealización de superclase C3 . Además tiene una interfaz binaria de aplicación (ABI) que facilita múltiples funciones de seguridad de tipos dentro de un solo contrato (más tarde soportada por Serpent). También incluye un sistema de documentación para especificar una descripción centrada en el usuario de las ramificaciones de una llamada a un método, conocido como "Especificación del lenguaje natural".[6]
Ejemplo de un programa de Solidity:[7]
pragma solidity >= 0.7.0 <0.8.0;
contract Coin {
// The keyword "public" makes variables
// accessible from other contracts
address public minter;
mapping (address => uint) public balances;
// Events allow clients to react to specific
// contract changes you declare
event Sent (address from, address to, uint amount);
// Constructor code is only run when the contract
// is created
constructor() public {
minter = msg.sender;
}
// Sends an amount of newly created coins to an address
// Can only be called by the contract creator
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// Sends an amount of existing coins
// from any caller to an address
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent (msg.sender, receiver, amount);
}
}
Plataformas de desarrollo disponibles
- Microsoft Visual Studio [cita requerida]
- Microsoft Visual Studio Code [8]
- Tendermint en Microsoft Azure [cita requerida]
- ErisDB de AWS [cita requerida]
- Remix de Ethereum [cita requerida]
Plataformas Blockchain
Solidity está disponible en:
- Ethereum
- Ethereum Classic
- Tendermint y ErisDB (una versión de Tendermint)[cita requerida]
- Counterparty (que se ejecuta en Bitcoin )[cita requerida]
- Tron
Referencias
- ↑ Afshar, Vala (17 de julio de 2017). «Ethereum Is The Second Most Valuable Digital Currency, Behind Bitcoin». HuffPost (en inglés). Consultado el 10 de abril de 2019.
- ↑ «SOFE Berlin: Swift unveils blockchain proof-of-concept». 24 de noviembre de 2016. Consultado el 24 de noviembre de 2016.
- ↑ «List of contributors».
- ↑ Finley, Klint (18 de junio de 2016). «A $50 MILLION HACK JUST SHOWED THAT THE DAO WAS ALL TOO HUMAN». Consultado el 18 de febrero de 2017.
- ↑ «Hyperledger Fabric Tutorial - Create a blockchain app for loyalty points». IBM Developer (en inglés estadounidense). Consultado el 10 de abril de 2019.
- ↑ ethereum. «Ethereum Natural Specification Format». GitHub.
- ↑ «Subcurrency Example from the Solidity documentation».
- ↑ PatAltimore. «Use Visual Studio Code to connect to Azure Blockchain Service - Azure Blockchain». docs.microsoft.com (en inglés estadounidense). Consultado el 27 de marzo de 2020.