Bitcoin Forum
June 07, 2024, 09:45:22 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2]  All
  Print  
Author Topic: [BOUNTY]Cardstack - Blockchain. Hasta usd 350K  (Read 238 times)
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
January 26, 2018, 12:39:44 PM
 #21


Cardstack usa un contrato base administratable.sol que proporciona la capacidad de agregar y eliminar administradores y súper administradores, así como modificadores para designar que las funciones solo pueden ser invocadas por administradores y superadministradores, o de forma más restrictiva, solo superadministradores. Además, se utilizan mapas iterables para que revisar introspectivamente las direcciones administrativas.

Code:
pragma solidity ^0.4.18;

import "zeppelin-solidity/contracts/ownership/Ownable.sol";
import "zeppelin-solidity/contracts/math/SafeMath.sol";

contract administratable is Ownable {
  using SafeMath for uint256;

  uint256 public totalAdminsMapping;
  uint256 public totalSuperAdminsMapping;
  mapping (uint256 => address) public adminsForIndex;
  mapping (uint256 => address) public superAdminsForIndex;
  mapping (address => bool) public admins;
  mapping (address => bool) public superAdmins;
  mapping (address => bool) processedAdmin;
  mapping (address => bool) processedSuperAdmin;

  event AddAdmin(address indexed admin);
  event RemoveAdmin(address indexed admin);
  event AddSuperAdmin(address indexed admin);
  event RemoveSuperAdmin(address indexed admin);

  modifier onlyAdmins {
    if (msg.sender != owner && !superAdmins[msg.sender] && !admins[msg.sender]) revert();
    _;
  }

  modifier onlySuperAdmins {
    if (msg.sender != owner && !superAdmins[msg.sender]) revert();
    _;
  }

  function addSuperAdmin(address admin) public onlyOwner {
    superAdmins[admin] = true;
    if (!processedSuperAdmin[admin]) {
      processedSuperAdmin[admin] = true;
      superAdminsForIndex[totalSuperAdminsMapping] = admin;
      totalSuperAdminsMapping = totalSuperAdminsMapping.add(1);
    }

    AddSuperAdmin(admin);
  }

  function removeSuperAdmin(address admin) public onlyOwner {
    superAdmins[admin] = false;

    RemoveSuperAdmin(admin);
  }

  function addAdmin(address admin) public onlySuperAdmins {
    admins[admin] = true;
    if (!processedAdmin[admin]) {
      processedAdmin[admin] = true;
      adminsForIndex[totalAdminsMapping] = admin;
      totalAdminsMapping = totalAdminsMapping.add(1);
    }

    AddAdmin(admin);
  }

  function removeAdmin(address admin) public onlySuperAdmins {
    admins[admin] = false;

    RemoveAdmin(admin);
  }
}

A modo de referencia, aparece el Registry.sol completo que muestra cómo se agrega el almacenamiento, cómo se registran y cómo se actualizan los contratos:

Code:
pragma solidity ^0.4.18;

import "zeppelin-solidity/contracts/ownership/Ownable.sol";
import "zeppelin-solidity/contracts/math/SafeMath.sol";
import "./upgradeable.sol";
import "./ExternalStorage.sol";
import "./CstLedger.sol";
import "./administratable.sol";
import "./configurable.sol";
import "./storable.sol";
import "./freezable.sol";
import "./ERC20.sol";

contract Registry is Ownable, administratable, upgradeable {
  using SafeMath for uint256;

  bytes4 constant INTERFACE_META_ID = 0x01ffc9a7;
  bytes4 constant ADDR_INTERFACE_ID = 0x3b3b57de;

  uint256 public numContracts;
  mapping(bytes32 => address) public storageForHash;
  mapping(bytes32 => address) public contractForHash;
  mapping(bytes32 => bytes32) public hashForNamehash;
  mapping(bytes32 => bytes32) public namehashForHash;
  mapping(uint256 => string) public contractNameForIndex;

  event ContractRegistered(address indexed _contract, string _name, bytes32 namehash);
  event ContractUpgraded(address indexed successor, address indexed predecessor, string name, bytes32 namehash);
  event StorageAdded(address indexed storageAddress, string name);
  event StorageRemoved(address indexed storageAddress, string name);
  event AddrChanged(bytes32 indexed node, address a);

  function() public {
    revert();
  }

  function supportsInterface(bytes4 interfaceId) public pure returns (bool) {
    return interfaceId == ADDR_INTERFACE_ID ||
           interfaceId == INTERFACE_META_ID;
  }

  function addr(bytes32 node) public view returns (address) {
    return contractForHash[hashForNamehash[node]];
  }

  function getContractHash(string name) public view unlessUpgraded returns (bytes32) {
    return keccak256(name);
  }

  function register(string name, address contractAddress, bytes32 namehash) public onlySuperAdmins unlessUpgraded returns (bool) {
    bytes32 hash = keccak256(name);
    require(bytes(name).length > 0);
    require(contractAddress != 0x0);
    require(contractForHash[hash] == 0x0);
    require(hashForNamehash[namehash] == 0x0);

    contractNameForIndex[numContracts] = name;
    contractForHash[hash] = contractAddress;

    if (namehash != 0x0) {
      hashForNamehash[namehash] = hash;
      namehashForHash[hash] = namehash;
    }

    numContracts = numContracts.add(1);

    address storageAddress = storageForHash[storable(contractAddress).getStorageNameHash()];
    address ledgerAddress = storageForHash[storable(contractAddress).getLedgerNameHash()];

    if (storageAddress != 0x0) {
      ExternalStorage(storageAddress).addAdmin(contractAddress);
    }
    if (ledgerAddress != 0x0) {
      CstLedger(ledgerAddress).addAdmin(contractAddress);
    }

    configurable(contractAddress).configureFromStorage();

    ContractRegistered(contractAddress, name, namehash);

    if (namehash != 0x0) {
      AddrChanged(namehash, contractAddress);
    }

    return true;
  }

  function upgradeContract(string name, address successor) public onlySuperAdmins unlessUpgraded returns (bytes32) {
    bytes32 hash = keccak256(name);
    require(successor != 0x0);
    require(contractForHash[hash] != 0x0);

    address predecessor = contractForHash[hash];
    contractForHash[hash] = successor;

    uint256 remainingContractBalance;
    // we need https://github.com/ethereum/EIPs/issues/165
    // to be able to see if a contract is ERC20 or not...
    if (hash == keccak256("cst")) {
      remainingContractBalance = ERC20(predecessor).balanceOf(predecessor);
    }

    upgradeable(predecessor).upgradeTo(successor,
                                       remainingContractBalance);
    upgradeable(successor).upgradedFrom(predecessor);

    address successorStorageAddress = storageForHash[storable(successor).getStorageNameHash()];
    address successorLedgerAddress = storageForHash[storable(successor).getLedgerNameHash()];
    address predecessorStorageAddress = storageForHash[storable(predecessor).getStorageNameHash()];
    address predecessorLedgerAddress = storageForHash[storable(predecessor).getLedgerNameHash()];

    if (successorStorageAddress != 0x0) {
      ExternalStorage(successorStorageAddress).addAdmin(successor);
    }
    if (predecessorStorageAddress != 0x0) {
      ExternalStorage(predecessorStorageAddress).removeAdmin(predecessor);
    }

    if (successorLedgerAddress != 0x0) {
      CstLedger(successorLedgerAddress).addAdmin(successor);
    }
    if (predecessorLedgerAddress != 0x0) {
      CstLedger(predecessorLedgerAddress).removeAdmin(predecessor);
    }

    configurable(successor).configureFromStorage();

    if (namehashForHash[hash] != 0x0) {
      AddrChanged(namehashForHash[hash], successor);
    }

    ContractUpgraded(successor, predecessor, name, namehashForHash[hash]);
    return hash;
  }

  function addStorage(string name, address storageAddress) public onlySuperAdmins unlessUpgraded {
    bytes32 hash = keccak256(name);
    storageForHash[hash] = storageAddress;

    StorageAdded(storageAddress, name);
  }

  function getStorage(string name) public view unlessUpgraded returns (address) {
    return storageForHash[keccak256(name)];
  }

  function removeStorage(string name) public onlySuperAdmins unlessUpgraded {
    address storageAddress = storageForHash[keccak256(name)];
    delete storageForHash[keccak256(name)];

    StorageRemoved(storageAddress, name);
  }
}

■ Programador

Hassan Abdel-Rahman
Developer at Cardstack

■ Links de la empresa

https://cardstack.com/
https://twitter.com/cardstack
https://www.facebook.com/cardstackproject
https://medium.com/cardstack

■ Chat Oficial de Telegram

Ingles: hIngles: https://t.me/cardstack
Español: Español: http://bit.ly/2FauvfP

■ Criptoinversores LATAM

Youtube: http://bit.ly/2ndiNu7
Twitter: http://bit.ly/2nexRa0
Linkedin: http://bit.ly/2GimYgb


rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
January 26, 2018, 12:42:38 PM
 #22


La piedra angular de todo este proceso es el llamado Servicio de nombres de Ethereum (ENS). ENS permite que los contratos se referencien usando un nombre amigable para los humanos en lugar de una cadena de caracteres hexadecimales no amigable para los humanos https://ens.domains/. Esto permite a los usuarios interactuar con un contrato de token en la dirección cardstack.eth en lugar de la dirección 0x66406f50624a645f36faa517c39049200d55c56e; al igual que ser capaz de utilizar un nombre de dominio como https://google.com en lugar del dns original que dificil de recordar que es https://172.217.12.206.

El registro Cardstack se adhiere a EIP-137, que es el estándar que rige ENS, de modo que puede actuar como un “nombre de sesión” resolver (que es cómo ENS representa internamente nombres de contrato). Debido a que el registro ya está haciendo un seguimiento de la dirección de la última versión de cualquier contrato, usarlo como un resolver para ENS es una opción muy natural.

Como parte del registro de un contrato con el registro de Cardstack, el “namehash” del nombre del contrato se suministra a la función register().

Ese namehash luego se puede derivar de la cadena utilizando un script (ver https://github.com/danfinlay/eth-ens-namehash) que convierte el nombre del contrato complejo a uno amigable con los humanos. La dirección del contrato de registro se puede usar como la ENS de la resolución, de modo que resuelve la dirección de la última versión de un contrato de token para los nombres que se le presentan.


■ Programador

Hassan Abdel-Rahman
Developer at Cardstack

■ Links de la empresa

https://cardstack.com/
https://twitter.com/cardstack
https://www.facebook.com/cardstackproject
https://medium.com/cardstack

■ Chat Oficial de Telegram

Ingles: hIngles: https://t.me/cardstack
Español: Español: http://bit.ly/2FauvfP

■ Criptoinversores LATAM

Youtube: http://bit.ly/2ndiNu7
Twitter: http://bit.ly/2nexRa0
Linkedin: http://bit.ly/2GimYgb

rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
January 26, 2018, 01:25:03 PM
 #23

Poniendolo todo junto

El enfoque que Cardstack está tomando para realizar contratos actualizables en Solidity incluye estas 3 características importantes:

Resguardo de estado en su propio(s) contrato(s).
Usar un contrato de registro para administrar direcciones de contrato y vincular contratos con su estado.
Resolución de búsquedas de nombre de ENS para direcciones de contrato.
Al adoptar estos enfoques para el desarrollo de contratos, Cardstack puede crear contratos que pueden evolucionar con el tiempo para satisfacer las necesidades cambiantes de las personas que usan nuestras aplicaciones distribuidas.

Esta es la primera de las optimistas actualizaciones que compartiremos sobre nuestra experiencia en Cardstack con Solidity.

■ Programador

Hassan Abdel-Rahman
Developer at Cardstack

■ Links de la empresa

https://cardstack.com/
https://twitter.com/cardstack
https://www.facebook.com/cardstackproject
https://medium.com/cardstack

■ Chat Oficial de Telegram

Ingles: hIngles: https://t.me/cardstack
Español: Español: http://bit.ly/2FauvfP

■ Criptoinversores LATAM

Youtube: http://bit.ly/2ndiNu7
Twitter: http://bit.ly/2nexRa0
Linkedin: http://bit.ly/2GimYgb


Elttonchuks
Member
**
Offline Offline

Activity: 112
Merit: 10


View Profile
February 01, 2018, 10:04:12 PM
 #24

TWITTER REPORT
WEEK # 2
Twitter user URL: https://twitter.com/elttonchuks
Spread sheet 168

List of retweets for week # (26,01-02,02)
1 https://twitter.com/cardstack/status/958708956938960903
2 https://twitter.com/cardstack/status/958661177730625536
3 https://twitter.com/cardstack/status/958603313360056321
4 https://twitter.com/cardstack/status/958578194709450752
5 https://twitter.com/cardstack/status/958512722483826690
6 https://twitter.com/cardstack/status/958483035179048960
7 https://twitter.com/crunchbase/status/958441702754308097
8 https://twitter.com/cardstack/status/958425270444347392
9 https://twitter.com/cardstack/status/958122450558078977
10 https://twitter.com/cardstack/status/958071793620848651
11,https://twitter.com/cardstack/status/957270780827586561
12 https://twitter.com/cardstack/status/957187702499237888
13 https://twitter.com/cardstack/status/957097100550070278
14 https://twitter.com/cardstack/status/957026815255695360
15 https://twitter.com/WachsmanPR/status/957025096912293891
16 https://twitter.com/cardstack/status/957022966331662336
17 https://twitter.com/cardstack/status/956956216944623617
18 https://twitter.com/cardstack/status/956926022519345158
19 https://twitter.com/cardstack/status/956880691794513920
20 https://twitter.com/cardstack/status/956835379239378944
21 https://twitter.com/cardstack/status/956790069477691392
22 https://twitter.com/cardstack/status/956754845859368961
Dasten
Newbie
*
Offline Offline

Activity: 2
Merit: 0


View Profile
February 04, 2018, 02:13:07 PM
 #25

Hola,

Esta abierto todavía el registro para la WhiteList o llego tarde?

Por otro lado, el sistema de recompensas esta activo? (sobretodo el de twitter, facebook y Telegram)

Un saludo y gracias!
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
March 21, 2018, 08:35:33 PM
 #26

Amigos, les invito a leer esta interesante nota

CARDSTACK ES UN ECOSISTEMA DE SOFTWARE DESCENTRALIZADO
La empresa representa un salto adelante para Blockchain en cada capa de la pila de software, proporcionando un conjunto de herramientas que desbloquea el potencial de la Internet descentralizada para todos.




Aquí les dejo la nota completa:

https://medium.com/@kirochka84/cardstack-is-a-decentralized-software-ecosystem-58b58f5965e2
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
March 21, 2018, 08:37:05 PM
 #27



Amigo debes informar en el Bounty Oficial en Ingles.

no aqui.
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
April 16, 2018, 10:00:36 PM
 #28

¡Bienvenidos a los recién llegados!

¡Cardstack tendrá otro #AMA pronto! ¿Tiene alguna pregunta para nosotros? ¡No dude en preguntar cualquier cosa que tenga, y asegúrese de etiquetarlos con el hashtag #AMA!

Chris Tse, Director Fundador de Cardstack, responde preguntas de la comunidad en el #AMA anterior. Puedes verlo a continuación:
https://youtu.be/ULAprHGoSg8

IMPORTANTE: Cardstack NUNCA realizará o solicitará pagos a través de Telegram. La dirección de venta y preventa solo se publicará en el sitio web de Cardstack. No envíe ETH a ninguna dirección a través de Telegram.
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
April 26, 2018, 06:29:08 PM
 #29

PENSAMIENTOS

La descentralización de Internet no ocurrirá repentinamente, sino gradualmente, y debemos construir para esa realidad.

Pensamientos de @christse en @beyondblocks



Nota completa en:
https://medium.com/cardstack/building-on-blockchain-for-the-real-world-92593b2a16ba
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
May 01, 2018, 12:00:41 PM
 #30




Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog



RECUERDE ESTE DATO DE SEGURIDAD



Ten cuidado con los estafadores. Nunca le pediremos que envíe fondos a
través de las redes sociales, correo electrónico o DM. No estamos haciendo
regalos gratis, ni ofrecemos bonos por esta vía.

Consulte https://cardstack.com para obtener la información más
reciente e infórmenos sobre cualquier actividad sospechosa en Telegram

rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
May 02, 2018, 10:51:26 PM
 #31




Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog



BUENAS NOTICIAS


Buenas Noticias: El contrato Inteligente de Cardstack
ha pasado las dos auditorías de seguridad por parte de
@NCCGroupInfosec, y oficialmente hemos abierto hoy
el código de contrato inteligente.


nota completa en:
https://medium.com/cardstack/cardstack-smart-contract-passes-ncc-audit-reaches-milestone-57e18ed90a76


rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
June 06, 2018, 12:38:29 AM
 #32

Estimados participantes de Cardstack Bounty,

Como ya anunciamos en el pasado, Cardstack brindará a todos los participantes la
opción de que sus recompensas se paguen en ETH en lugar de fichas de CARD.
Si desea tenerlo de esta manera, envíe este formulario la próxima semana

(hasta el 11.06.2018 a las 23:59 CEST)

Complete este formulario si desea recibir ETH en lugar de tokens CARD: ►Formulario◄

Tenga en cuenta que solo aceptaremos su solicitud si utiliza los mismos
detalles en la hoja de cálculo principal, incluida la misma dirección ETH.
rDieminger (OP)
Member
**
Offline Offline

Activity: 784
Merit: 64

■ Professional Spanish Translator


View Profile WWW
June 26, 2018, 10:06:51 PM
 #33

NOTICIAS

El Director Fundador de Cardstack @christe se sentó con @queentatiana esta mañana para hablar sobre lo que hemos estado trabajando:

https://youtu.be/WZsdajfH1xo
Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!