Smart Contract Development with Soroban and Hardhat
In this tutorial, we will discover the similarities in smart contract deployment by examining workflows with Soroban and Hardhat. We will dive into the intricacies of each framework, learn to write secure and efficient smart contract code, and harness the power of Rust and Soroban to create customized contract logic.
Table of Contents
- Soroban and Hardhat Comparison
- Hardhat vs Soroban SDKs
- Using Rust and Soroban for Smart Contract Development
- Vault Contract Deployment and Interaction
Soroban and Hardhat Comparison
Introduction
Soroban and Hardhat are both frameworks that enable developers to build, test, and deploy smart contracts. In this section, we will delve into the similarities and distinctions between these two frameworks.
Soroban Framework
Soroban es un marco basado en Rust diseñado para desarrollar contratos inteligentes en la red Stellar. Diseñado como un marco ligero, con herramientas para admitir a los desarrolladores, Soroban permite a los desarrolladores crear contratos inteligentes a través de un flujo de trabajo simple e intuitivo.
Hardhat
Hardhat sirve como un entorno de desarrollo para compilar, desplegar, probar y depurar contratos inteligentes para la EVM. Asiste a los desarrolladores en la gestión y automatización de tareas recurrentes inherentes a la construcción de contratos inteligentes.
Similaridades
Soroban y Hardhat son marcos potentes diseñados para agilizar el proceso de construir, probar y desplegar contratos inteligentes. Equipadas con una suite integral de herramientas, estos marcos facilitan el desarrollo de contratos inteligentes y su despliegue en sus respectivas máquinas virtuales.
Diferencias
Soroban, con su diseño ligero, ofrece a los desarrolladores una plataforma excepcional para escribir contratos inteligentes basados en Rust y desplegarlos sin esfuerzo en la red Stellar. En contraste, Hardhat sirve principalmente como un entorno de desarrollo diseñado para la Máquina Virtual de Ethereum, proporcionando un enfoque y audiencia objetivo diferentes.
Hardhat vs. Soroban SDKs
Hardhat ofrece un flujo de trabajo optimizado para desplegar contratos inteligentes en la Máquina Virtual de Ethereum, con componentes clave como ethers.js
, scripts
, y testing
desempeñando roles cruciales.
Por otro lado, Soroban presenta una alternativa convincente, con potentes SDKs que facilitan el desarrollo y despliegue de contratos inteligentes. En la próxima sección, profundizaremos en SDKs de Soroban, comparando componentes de Hardhat y destacando las ventajas únicas que cada plataforma aporta.
Ethers.js
Ethers.js
es una biblioteca de JavaScript
ampliamente utilizada diseñada para la interacción sin problemas con la EVM. Ofrece una interfaz amigable que simplifica la conexión a nodos de Ethereum, la gestión de cuentas y el envío de transacciones. Además, Ethers.js
proporciona una API robusta para la comunicación eficiente con contratos inteligentes. Esta biblioteca es un componente central del marco Hardhat y puede ser importada en scripts para agilizar el despliegue de contratos inteligentes.
const { ethers } = require("hardhat");
async function main() {
const [deployer] = await ethers.getSigners();
console.log("Deploying contracts with the account:", deployer.address);
}
Soroban Client
Soroban ofrece una biblioteca comparable, stellar-sdk
, que permite la interacción sin problemas con contratos inteligentes desplegados en la Red Stellar. Esta biblioteca proporciona una API de capa de red integral para métodos RPC de Stellar, así como la API tradicional de Horizon, simplificando el proceso de construcción y firma de transacciones. Además, stellar-sdk
agiliza la comunicación con instancias RPC y admite enviar transacciones o consultar el estado de la red con facilidad.
Scripts
Los scripts de Hardhat agilizan la automatización de tareas rutinarias, como desplegar y gestionar contratos inteligentes. Los desarrolladores pueden crear estos scripts usando JavaScript o TypeScript, adaptándose a su estilo de programación preferido. Se almacenan en el directorio scripts
de un proyecto Hardhat y pueden ejecutarse utilizando el comando npx hardhat run
.
// scripts/deploy.js
async function main() {
// Compile and deploy the smart contract
const MyContract = await ethers.getContractFactory("MyContract");
const myContract = await MyContract.deploy();
console.log("MyContract deployed to:", myContract.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
Soroban Scripts
Soroban ofrece una amplia colección de SDKs que incluyen capacidades de scripting, asegurando un flujo de trabajo fluido para desplegar y gestionar contratos inteligentes. Los desarrolladores pueden automatizar tareas como compilar, desplegar e interactuar con contratos inteligentes utilizando una variedad de SDKs que admiten la escritura de scripts en lenguajes como JavaScript
, TypeScript
, Python
y otros.
# This example shows how to deploy a compiled contract to the Stellar network.
# https://github.com/stellar/soroban-quest/blob/main/quests/6-asset-interop/py-scripts/deploy-contract.py
import time
from stellar_sdk import Network, Keypair, TransactionBuilder
from stellar_sdk import xdr as stellar_xdr
from stellar_sdk.soroban import SorobanServer
from stellar_sdk.soroban.soroban_rpc import TransactionStatus
# TODO: You need to replace the following parameters according to the actual situation
secret = "SAAPYAPTTRZMCUZFPG3G66V4ZMHTK4TWA6NS7U4F7Z3IMUD52EK4DDEV"
rpc_server_url = "https://soroban-testnet.stellar.org"
network_passphrase = Network.TESTNET_NETWORK_PASSPHRASE
contract_file_path = "/path/to/compiled/soroban_contract.wasm"
kp = Keypair.from_secret(secret)
soroban_server = SorobanServer(rpc_server_url)
print("installing contract...")
source = soroban_server.load_account(kp.public_key)
# with open(contract_file_path, "rb") as f:
# contract_bin = f.read()
tx = (
TransactionBuilder(source, network_passphrase)
.set_timeout(300)
.append_install_contract_code_op(
contract=contract_file_path, # the path to the contract, or binary data
source=kp.public_key,
)
.build()
)
...
Testing
Hardhat proporciona un marco de pruebas que permite a los desarrolladores escribir pruebas para sus contratos inteligentes. Estas pruebas pueden escribirse en JavaScript o TypeScript y ejecutarse utilizando el comando npx hardhat test
.
// test/my-contract.js
const { expect } = require("chai");
describe("MyContract", function () {
it("Should return the correct name", async function () {
const MyContract = await ethers.getContractFactory("MyContract");
const myContract = await MyContract.deploy();
await myContract.deployed();
expect(await myContract.name()).to.equal("MyContract");
});
});
Soroban Testing
Soroban permite a los usuarios aprovechar el poder del marco de pruebas de Rust para escribir pruebas para sus contratos inteligentes. Estas pruebas pueden escribirse en Rust y ejecutarse usando el comando cargo test
.
#![cfg(test)]
use super::*;
use soroban_sdk::{vec, Env, Symbol, symbol_short};
#[test]
fn test() {
let env = Env::default();
let contract_id = env.register_contract(None, HelloContract);
let client = HelloContractClient::new(&env, &contract_id);
let words = client.hello(&symbol_short!("Dev"));
assert_eq!(
words,
vec![&env, symbol_short!("Hello"), symbol_short!("Dev"),]
);
}
En resumen, mientras Hardhat proporciona un excelente entorno para desplegar contratos inteligentes en la EVM, el marco basado en Rust de Soroban ofrece ventajas significativas en términos de rendimiento, lo que lo convierte en una opción ideal para construir contratos inteligentes seguros y eficientes.
Desarrollar Contratos Inteligentes con Rust y Soroban
Introducción
Ahora que hemos examinado el flujo de trabajo de despliegue con Hardhat, exploremos el desarrollo y despliegue de contratos inteligentes con Rust y Soroban. La principal ventaja de utilizar Soroban es su capacidad para aprovechar las características de seguridad y rendimiento de Rust, lo que lo convierte en una excelente opción para desarrollar contratos inteligentes seguros y eficientes.
Hemos aprendido que los contratos inteligentes son contratos autoejecutables que pueden programarse para hacer cumplir automáticamente las reglas y regulaciones de un acuerdo particular. Son un componente central de las aplicaciones descentralizadas (dApps) y la tecnología blockchain. En esta sección, aprenderemos cómo usar Rust y Soroban para desarrollar y desplegar lógica de contrato inteligente personalizada.
Configuración
Si aún no has configurado el entorno de desarrollo para Soroban, puedes comenzar siguiendo los pasos en la Página de Configuración.
Este proyecto requiere el uso del archivo soroban_token_contract.wasm
que necesitarás importar manualmente.
Primero, necesitarás clonar la etiqueta v22.0.1
del repositorio soroban-examples
:
git clone -b v22.0.1 https://github.com/stellar/soroban-examples
Luego, navega al directorio soroban-examples/token
cd soroban-examples/token