ETFFIN Finance >> Finanças pessoais curso >  >> fund >> Informação de fundo

O que é Solidity?

Solidity é a linguagem de programação usada para escrever, Criar, e implementar contratos inteligentes. Se você quiser aprender contratos inteligentes, você não pode fazer isso sem entender e aprender Solidity.

p Foi inicialmente proposto em 2014 por Gavin Wood, mas foi posteriormente desenvolvido e lançado por Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai, e vários ex-colaboradores principais do Ethereum, A solidez permite a criação e redação de contratos inteligentes em plataformas de blockchain como Ethereum, Ethereum Classic, Tron, entre outros.

p Ele serve como o idioma principal na Máquina Virtual da Ethereum (EVM).

Semelhante a Javascript

p Em sua forma mais básica, é uma “linguagem fracamente tipada”. A linguagem funciona muito semelhante a C e Javascript, mas integra suporte adicional para variáveis ​​de estado, tipos de dados, e funções de programação.

p Quando Wood projetou isso pela primeira vez, ele disse que era para torná-lo familiar e fácil para os desenvolvedores web existentes. Em contraste com o Javascript, O Solidity tem tipagem estática e tipos de retorno variadic.

p Com solidez, os desenvolvedores de blockchain são capazes de escrever aplicativos que implementam lógica de negócios de auto-aplicação (autogoverno) incorporada em contratos inteligentes. Em planície, isso é o que permite que os contratos sejam autoexecutáveis, não requer envolvimento humano, assim que o código for escrito.

Para aqueles que são programadores qualificados, esta linguagem é bastante fácil. Para o leigo, Contudo, requer tempo e paciência.

Noções básicas sobre sintaxe e tipos de dados gerais

Solidity oferece suporte a tipos de valor genéricos, especificamente booleanos, inteiros, endereços, literais de string, e modificadores. Vamos explorar cada um.

Booleanos

p Na ciência da computação, O tipo de dados booleano é um tipo de dados que possui dois valores possíveis - verdadeiro ou falso. Esses valores pretendem representar os dois valores verdade da lógica e da álgebra booleana. Para obter mais informações sobre isso, por favor, clique aqui.

p Os operadores lógicos que retornam tipos de dados booleanos:

  • ! Negação lógica
  • &&conjunção lógica, "e"
  • || disjunção lógica, "ou"
  • ==igualdade
  • ! =desigualdade

Inteiros

p Solidity suporta int / unit para inteiros com e sem sinal, respectivamente. Essas alocações de armazenamento podem ser de vários tamanhos. Palavras-chave como uint8 e uint256 podem ser usadas para alocar um tamanho de armazenamento de 8 bits a 256 bits, respectivamente. Por padrão, a alocação é de 256 bits. Isso é, uint e int podem ser usados ​​no lugar de uint256 e int256.

p Os operadores compatíveis com tipos de dados inteiros são:

  • Comparações:<=, <, ==, ! =,> =,> . Eles são usados ​​para avaliar o bool.
  • Operadores de bits:&, |, ^ bit a bit exclusivo 'ou', ~ negação bit a bit, "não".
  • Operadores aritméticos:+, -, unário -, unário +, *, /, % restante, ** exponenciação, <> deslocamento para a direita.

O EVM retorna uma exceção de tempo de execução quando o operador de módulo é aplicado ao zero de uma operação de “divisão por zero”.

Endereço

p Um endereço pode conter um valor de 20 bytes que é equivalente ao tamanho de um endereço Ethereum. Esses tipos de endereço são copiados com membros que servem como base de contrato.

Para obter mais informações sobre “valores de byte”, por favor, clique aqui.

Literais de string

p Um "literal de string" ou string anônima, é um tipo de literal em programação para a representação de um valor de “string” dentro do código-fonte de um programa de computador. Para obter mais informações sobre isso, por favor, clique aqui.

p Ao contrário da linguagem C, literais de string em Solidity implicam em zeros de valor à direita. Eles podem ser representados usando aspas simples ou duplas --- “foo” ou ‘bar’.

p Por exemplo, “Bar” representará um elemento de 3 bytes, em vez de quatro (4).

De forma similar, com literais inteiros, os literais são conversíveis inerentemente, usando o fit - byte ou string correspondente.

Modificador

Em contratos inteligentes, modificadores ajudam a garantir a coerência das condições definidas, antes de executar o código. Em outras palavras, garante que as condições sejam definidas corretamente, de modo a correr o risco de cálculo impreciso e, portanto, execução.

Mapeamentos

p Solidity fornece matrizes básicas, enums, operadores, e valores hash para criar uma estrutura de dados, conhecido como “mapeamentos”. Eles são usados ​​para retornar valores associados a um determinado local de armazenamento.

Uma "matriz" é uma alocação de memória contígua de um tamanho definido pelo programador onde se o tamanho for inicializado como "K", e o tipo de elemento é instanciado como "T", a matriz pode ser escrita como T [k].

Matrizes Dinâmicas

Os arrays também podem ser instanciados dinamicamente usando a notação uint [] [6]. Isso significa que uma matriz dinâmica com seis alocações de memória contíguas será iniciada, enquanto uma matriz bidimensional pode ser inicializada como arr [2] [4], onde os dois índices mostram as dimensões da matriz.

Código de Solidez de Amostra

p solidez ragma> =0,5,0 <0,7,0;

Moeda de contrato {// A palavra-chave "pública" torna as variáveis
// acessível a partir de outros contratos
endereço público minter;
mapeamento (endereço => uint) balanços públicos; // Os eventos permitem que os clientes reajam a determinados
// alterações de contrato que você declara
evento Enviado (endereço de, endereço para, quantidade uint); // O código do construtor só é executado quando o contrato
// é criado
construtor () public {
minter =msg.sender; } // Envia uma quantidade de moedas recém-criadas para um endereço
// Só pode ser chamado pelo criador do contrato
função mint (receptor de endereço, quantidade uint) public {
requer (msg.sender ==minter); requer (quantidade <1e60); saldos [recebedor] + =montante; } // Envia uma quantidade de moedas existentes
// de qualquer chamador para um endereço
função enviar (destinatário do endereço, quantidade uint) public {
requer (montante <=saldos [msg.sender], "Saldo insuficiente."); saldos [msg.sender] - =montante; saldos [recebedor] + =montante; emitir Sent (msg.sender, receptor, quantia); }}