Constructor visual de contratos inteligentes. Armás el contrato encastrando bloques, y sale desplegado en la cadena que elijas.
Soporta Stellar (Soroban, en Rust) y EVM (BNB Chain y Polkadot Asset Hub, en Solidity). El mismo constructor, dos familias de cadena distintas.
src/ el constructor visual (React + Blockly)
components/ ContractBuilder.tsx es el editor
utils/blocklyConfig los bloques y sus reglas
contracts/
evm/ Solidity, para BNB y Polkadot
stellar/ Soroban, en Rust
server/ backend que compila contratos Soroban al vuelo
index.cjs Express, genera Rust desde plantillas y lo compila
templates/ plantillas Handlebars de tokens Stellar
ignition/ despliegues de Hardhat
scripts/ scripts de despliegue
docs/ la documentación que estaba suelta en la raíz
reference/stellar-ui/ el frontend viejo de la parte Stellar, como referencia
npm install
npm run dev # el constructor visual
npm run server # el backend que compila contratos SorobanPara EVM, la clave privada se guarda con vars, no en un .env:
npx hardhat vars set PRIVATE_KEY
npm run compile
npm run deploy:bsc-testnet # BNB Chain testnet
npm run deploy:polkadot # Polkadot Asset HubLas tres redes están en hardhat.config.js: bscTestnet (97), bsc (56) y
passetHub (420420422). Agregar otra cadena EVM es sumar una entrada ahí; los
contratos no cambian.
Para Stellar, el backend compila y despliega contra testnet directamente.
Este repositorio junta cuatro que hacían partes del mismo producto:
| Repositorio | Qué aportó |
|---|---|
tralacontracts |
La base: el constructor Blockly, Hardhat, los despliegues EVM |
TralalaContracts |
El lado Stellar: el backend, las plantillas Soroban, los contratos |
TralaleroBNB |
Nada. Sólo tenía un README |
TralaBNBcontracts |
Nada. Estaba vacío, sin un solo commit |
TralalaContracts pesaba 2 GB, de los cuales el contenido real eran 74
archivos. Los otros 6623 eran artefactos de compilación commiteados: había seis
copias de libstellar_xdr-*.rlib, de 34 MB cada una. Nada de eso vino, y el
.gitignore de acá está escrito para que no vuelva a pasar.
Dos cosas que hubo que resolver al juntarlos:
El backend es CommonJS y el paquete es ESM. server/index.cjs usa require,
y el package.json de la raíz declara "type": "module". Vive en su propio
ámbito con un package.json propio que dice "type": "commonjs"; sin eso, el
servidor no arranca.
Los nombres de paquete chocaban. Uno se llamaba tralalacontracts-dot y el
otro tralalerocontracts-app. Ahora es uno solo.