npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@acdi/give4forest-contract

v1.3.1

Published

Crowdfunding Smart Contract de El Futuro está en el Monte

Downloads

188

Readme

Crowdfunding Smart Contract

Smart contract de Crowdfunding.

Se utiliza Buidler como herramienta de ejecución de las tareas de compilación, testing y despliegue del smart contract.

En la sección Architectural Decision Log se encuentran los registros de decisiones de arquitectura que han sido tomadas.

Requisitos sobre sistema operativo

Windows

Instalar Python.

Instalación de dependencias

Primero deben instalarse las dependencias del proyecto con el siguiente comando:

npm install

Compilación

Para compilar el smart contract, debe ejecutarse el siguiente comando.

npm run compile

Se requiere mantener reducido el bytecode generado por el smart contract para no superar la restricción EIP 170. El siguiente comando mide la cantidad de bytes generados para cada contrato compilado.

grep \"bytecode\" artifacts/* | awk '{print $1 " " length($3)/2}'

La primera vez la compilación falla al no encontrar algunos smart contracts de Aragon, por ejemplo, es posible encontrarse con el siguiente error: Error: BDLR700: Artifact for contract "Kernel" not found. En este caso ejecutamos npm start. Esto último a menudo muestra algún error, pero lo que nos interesa es que compile los smart contracts faltantes. Una vez hecho esto volver a ejecutar npm run compile.

Workaround: dado que la aplicación funciona con Node v10, se requiere importar los siguientes componentes en algunas librerías tras los errores de compilación. var globalThis = require('globalthis')(); y const { TextEncoder, TextDecoder } = require("util");.

Testing

Para ejecutar los tests del smart contract, debe ejecutarse el siguiente comando.

npm run test

Los test se ejecutan por defecto sobre la blockchain buidlerevm.

Publicar en NPM

Para que el módulo quede públicamente accecible y pueda utilizarse por los demás módulos de la aplicación, es necesario publicarlo de la siguiente manera:

npm login
npm publish --access public

El módulo se publica con el scope de la organización @acdi.

Despliegue

Para desplegar el smart contract sobre la blockchain de RSK, debe ejecutarse el comando descrito según el ambiente.

Junto con el smart contract de Crowdfunding se despliegan los smart contract de Aragon y librerías por lo que este proceso puede demandar algunos minutos.

Las direcciones que aparecen en el log deben utilizarse para configurar la aplicación de Crowdfunding.

Desarrollo

Si el entorno de desarrollo es Windows, instalar win-node-env.

npm install -g win-node-env

En desarrollo se utiliza un nodo local de RSK Regtest accesible desde http://localhost:4444.

npm run rsk-regtest:deploy

Opcionalmente, puede especificarse qué DAO, Admin o Exchange Rate Provider utilizar en el deploy:

$env:DAO_CONTRACT_ADDRESS="..."
$env:ADMIN_CONTRACT_ADDRESS="..."
$env:EXCHANGE_RATE_PROVIDER_CONTRACT_ADDRESS="..."
npm run rsk-regtest:deploy
  • DAO_CONTRACT_ADDRESS es la dirección del Aragon DAOdisponible desde el deploy inicial según la red.
  • ADMIN_CONTRACT_ADDRESS es la dirección del smart contract de administración.
  • EXCHANGE_RATE_PROVIDER_CONTRACT_ADDRESS es la dirección del Exchange Rate Provider a utilizar.

Testing

En testing se utiliza el nodo público de RSK Testnet accesible desde https://public-node.testnet.rsk.co.

$env:DAO_CONTRACT_ADDRESS="..."
$env:ADMIN_CONTRACT_ADDRESS="..."
$env:EXCHANGE_RATE_PROVIDER_CONTRACT_ADDRESS="..."
npm run rsk-testnet:deploy
  • DAO_CONTRACT_ADDRESS es la dirección del Aragon DAOdisponible desde el deploy inicial según la red.
  • ADMIN_CONTRACT_ADDRESS es la dirección del smart contract de administración.
  • EXCHANGE_RATE_PROVIDER_CONTRACT_ADDRESS es la dirección del Exchange Rate Provider a utilizar.

Actualizar smart contract

Para actualizar el smart contract debe ejecutarse el siguiente script, especificando los parámetros:

$env:BUIDLER_NETWORK="..."
$env:DAO_CONTRACT_ADDRESS="..."
node .\scripts\upgrade.js
  • BUIDLER_NETWORK = rskRegtest | rskTestnet | rskMainnet
  • DAO_CONTRACT_ADDRESS es la dirección del Aragon DAOdisponible desde el deploy inicial según la red.

Este scrtip es genérico para una actualización. Las actualización generalmente siguen scrtip específicos según los cambios en la versión. A continuación se lista los upgrades.

v1.1.0

$env:BUIDLER_NETWORK="..."
$env:CROWDFUNDING_ADDRESS="..."
node .\scripts\upgrade-v1.1.0.js
  • BUIDLER_NETWORK = rskRegtest | rskTestnet | rskMainnet
  • CROWDFUNDING_ADDRESS es la dirección del smart contract de Crowdfunding (proxy).

v1.3.0

$env:BUIDLER_NETWORK="..."
$env:DAO_CONTRACT_ADDRESS="..."
$env:ARRAY_LIB_ADDRESS="..."
$env:ENTITY_LIB_ADDRESS="..."
$env:DAC_LIB_ADDRESS="..."
$env:CAMPAIGN_LIB_ADDRESS="..."
$env:MILESTONE_LIB_ADDRESS="..."
$env:ACTIVITY_LIB_ADDRESS="..."
$env:DONATION_LIB_ADDRESS="..."
node .\scripts\upgrade-v1.3.0.js
  • BUIDLER_NETWORK = rskRegtest | rskTestnet | rskMainnet
  • CROWDFUNDING_ADDRESS es la dirección del smart contract de Crowdfunding (proxy).

v1.3.1

$env:BUIDLER_NETWORK="..."
$env:DAO_CONTRACT_ADDRESS="..."
$env:ARRAY_LIB_ADDRESS="..."
$env:ENTITY_LIB_ADDRESS="..."
$env:DAC_LIB_ADDRESS="..."
$env:CAMPAIGN_LIB_ADDRESS="..."
$env:ACTIVITY_LIB_ADDRESS="..."
$env:DONATION_LIB_ADDRESS="..."
node .\scripts\upgrade-v1.3.1.js
  • BUIDLER_NETWORK = rskRegtest | rskTestnet | rskMainnet
  • CROWDFUNDING_ADDRESS es la dirección del smart contract de Crowdfunding (proxy).

Otorgar permisos

Para otorgar permisos debe ejecutarse el siguiente script, especificando los parámetros:

$env:BUIDLER_NETWORK="..."
$env:DAO_CONTRACT_ADDRESS="..."
$env:CROWDFUNDING_ADDRESS="..."
$env:ACCOUNT_ADDRESS="..."
$env:ROLE="..."
node .\scripts\grant-permission.js
  • BUIDLER_NETWORK = rskRegtest | rskTestnet | rskMainnet
  • DAO_CONTRACT_ADDRESS es la dirección del Aragon DAO disponible desde el deploy inicial según la red.
  • CROWDFUNDING_ADDRESS es la dirección del smart contract de Crowdfunding.
  • ACCOUNT_ADDRESS es la dirección pública de la cuenta a la cual se otorga el permiso.
  • ROLE = GIVER_ROLE | DELEGATE_ROLE | CAMPAIGN_MANAGER_ROLE | CAMPAIGN_REVIEWER_ROLE | MILESTONE_MANAGER_ROLE | MILESTONE_REVIEWER_ROLE | RECIPIENT_ROLE | SET_EXCHANGE_RATE_PROVIDER_ROLE | ENABLE_TOKEN_ROLE

Principios de desarrollo

Para el desarrollo del smart contract se deben seguir los siguientes principios:

  • Seguir la guía de estilos de desarrollo de Solidity.
  • El orden los metodos debe ser: external, public, internal y private; Deben seguir un orden de relevancia.
  • Siempre que sea posible, el tratamiento sobre las entidades debe delegarse en las librerías para mantener el bytecode del smart contract reducido.
  • Sebe realizarse testing automático de las funcionalidades expuestas al exterior.