rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 23, 2018, 12:38:52 AM Last edit: March 07, 2018, 09:07:47 PM by rDieminger |
|
■ Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog ■
¦ Bounty oficial en ingles | ANN en español ¦
Cardstack está iniciando su Programa Bounty Oficial para recompensar a sus seguidores con fichas Cardstack. Token: CARD. El 1% de la cantidad recaudada (en tokens) se asignará al Programa Bounty. El programa se ejecutará hasta el final de la venta de tokens. Las recompensas se pagarán dentro de los 30 días posteriores de finalizada de la Venta de Tokens.
Campañas y Porcentaje destinado: Por favor verifique su participación en esta hoja de cálculo aquí: REGLA GENERAL :: todos los participantes de recompensas deben unirse al grupo CardStack en telegram : https://telegram.me/cardstackGrupo exclusivo de Recompensas telegram: "no hay" NEWSLETTER Los primeros 1000 suscriptores del boletín ganarán unos tokens por ser parte del grupo Solicitud: 1. Suscríbete al boletín en nuestro sitio web 2. Complete y envíe el siguiente formulario: Próximamente
PARTICIPACIÓN SEMANALCUALQUIER ENVÍO DE SUS ACCIONES/PUBLICACIONES DE ESTA CAMPAÑA DE RECOMPENSAS MÁS ALLÁ DE LA FECHA DE FINALIZACIÓN DE CADA SEMANA NO SE CONTARÁCAMPAÑA DE TWITTERLas participaciones se pagarán según la cantidad de seguidores (al comienzo de la campaña). ──────────────── | ──────────────── | de 250-749 seguidores: | 1 participación por tweet/retweet | de 750-1499 seguidores: | 2 apuestas por tweet/retweet | de 1500-9999 seguidores: | 4 apuestas por tweet/retweet | Más de 10.000 seguidores: | 6 participaciones por tweet/retweet | ──────────────── | ──────────────── |
Mínimo: 3 retweets por semana Máximo: 4 retweets por día y 20 retweets por semanaSolicitud: 1. Siga a Cardstack en Twitter: https://twitter.com/cardstack2. Regístre su participación utilizando este formulario: https://goo.gl/forms/PBhpTQMumsBiLro533. Registre sus Tweet/retweets cada semana en el hilo (más reciente dentro de la próxima semana) con este formato: TWITTER REPORT WEEK # Twitter user URL: Lista de retweets para la semana # (reemplace # por el número de semanas que participa): 1 2 3 4 5 Reglas:- Debes tener el rango de "Miembro Jr." o superior en Bitcointalk - Los tweets / retweets deben tener al menos 2 de estos hashtags: #Crowdfunding #Cardstack #dApps. - Su puntaje de auditoría de twitter ( https://www.twitteraudit.com/) debe ser igual a al menos 85% y solo contarán los seguidores reales de la última auditoría. - La cantidad de seguidores de Twitter NO se actualizarán después de haberse registrado en la campaña - No retwittear nada anterior a 4 días, NO se contará - los weets / retweets tienen que estar espaciados por lo menos 1 hora. Cualquier persona que viole esta regla será excluida de la campaña de recompensas
CAMPAÑA DE TRADUCCIONES Y MODERACIÓN Esta recompensa consiste en dos tareas: 1. Traducción de ANN + bounty thread 2. Creación y moderación de grupos locales de Telegram / Wechat / Kakaochat Las participaciones obtenidas dependerán de la actividad en el hilo y del número de miembros del grupo Telegram / Wechat / Kakaochat. - Traducción del mensaje fijado del grupo principal: 5 participaciones + 2 participaciones por miembro al final de la campaña
- Moderación local de ANN + bounty thread: 50 participaciones + 10 participaciones por publicación válida
- Traducción de Whitepaper: 200 participaciones
Solicitud:1. Envíe un correo electrónico a bounty@amazix.com con los siguientes detalles: - Lengua materna - Parte de la recompensa que solicita (ANN / WP / Telegram) - Experiencia de traducción / moderación (si la hay) - Nombre de usuario Bitcointalk - Dirección de la cartera ERC-20 2. Después de completar la traducción, publique en este hilo un enlace al hilo traducido o documento técnico Reglas:1. Se requiere que los participantes mantengan vivo el hilo local y los grupos de Telegram publicando y traduciendo actualizaciones periódicas, noticias o cualquier anuncio importante. Se rechazará una sola publicación. 2. Las traducciones automáticas (Google o similares) o traducciones con baja calidad serán rechazadas. 3. Las publicaciones innecesarias o repetidas se rechazarán para el recuento de recompensas. 4. Solo las publicaciones escritas por el OP contarán. 5. Solo las publicaciones escritas por el autor se cuentan como publicaciones válidas.
CAMPAÑA DE FIRMA
Distribución de participaciones según nivel de usuario:
Miembro Jr. : 1 Participación / semana Miembro: 2 Participación/ semana Miembro completo: 3 Participación/ semana Miembro Sr : 5 Participación/ semana miembro Héroe / Legendario: 7 Participación/ semana
Solicitud:1. Agrega la firma de tu nivel, avatar y texto personal 2. Rellene y envíe este formulario: https://goo.gl/forms/QNyrVLfEIJ3PeS353Reglas: 1. La Firma, avatar y texto personal deben mantenerse hasta que se hayan calculado las apuestas después del final de la TGE (permita alrededor de una semana para estos cálculos) 2. Se debe realizar un mínimo de 15 publicaciones significativas por semana durante este período. Fuera del tema, spam y publicaciones sin sentido no contarán. 3. Las publicaciones deben tener una longitud mínima de 70 caracteres 4. Los participantes deben tener al menos Rango de miembro Jr. o miembro en el foro Firmas:Miembro Jr.[center][url=https://cardstack.com/]╔═◼ CARDSTACK ◼═╗The Experience Layer of the Decentralized Internet[/center] Miembro [center][url=https://cardstack.com/]╔═════════════════ [b]CARDSTACK[/b] ═════════════════╗ ╚══◼ The Experience Layer of the Decentralized Internet ◼══╝[/url] [url=https://twitter.com/cardstack]◼══════ Twitter[/url] [url=https://telegram.me/cardstack]⦁ Telegram[/url] [url=https://medium.com/cardstack]⦁ Blog[/url] [url=https://bitcointalk.org/index.php?topic=2768237.0]⦁ Bitcointalk ══════◼[/url][/center] Miembro Full [center][b][font=arial][url=https://cardstack.com/][color=#00c252]╔═════════════════ [b][color=#3c2282]C[color=#3f1f96]A[color=#431cab]R[color=#4619bf]D[color=#4916d3]S[color=#4619bf]T[color=#431cab]A[color=#3f1f96]C[color=#3c2282]K[/b] ═════════════════╗ [font=rockwell][color=#03c4c0]╚══[color=#3c2282]◼[/color] [color=#3c2282]The Experience Layer of the Decentralized Internet[/color] [color=#3c2282]◼[/color]══╝[/url] [font=rockwell][color=#00c252][color=#3c2282]◼[/color]══════ [url=https://twitter.com/cardstack][color=#9513FF]Twitter[/url] ⦁ [url=https://telegram.me/cardstack][color=#9513FF]Telegram[/url] ⦁ [url=https://medium.com/cardstack][color=#9513FF]Blog[/url] ⦁ [url=https://bitcointalk.org/index.php?topic=2768237.0][color=#9513FF]Bitcointalk[/url] ══════[color=#3c2282]◼[/color][/center] Miembro Senior [center]Sr. Member [img width=800]https://i.imgur.com/QfIqTah.png[/img][/center]
[code][center][table][tr][td][url=https://cardstack.com/][size=2px][tt][color=#37FF8B] ▄▄███▄▄ ███████████ ▄▄███▄▄ ▀▀███▀▀ ▄▄███▄▄ ████████████▄▄ ███████████ ▀▀████████████▄▄ ▀▀███▀▀ ▀▀████████████ [color=#03c4c0] ▄▄███▄▄ [color=#37FF8B]▀▀███▀▀[/color] ▄▄███▄▄ ███████████▄▄ ███████████ ▀▀████████████▄▄ ▀▀███▀▀ ▀▀█████████████▄▄ ▄▄███▄▄ ▀▀█████████████▄▄ ████████████▄▄ ▀▀████████████ ▀▀████████████▄▄ ▀▀█████▀▀ ▀▀████████████ ▀▀█████▀▀ [/td][td][url=https://cardstack.com/][font=arial][b][size=22px][color=#3c2282]CARDSTACK [size=9px]The Experience Layer of the Decentralized Internet[/td][td][/td][td][size=30px][color=#00fff9]│[/td][td][size=4px]. [url=https://cardstack.com/][color=#381D75][size=12px][font=arial]Bringing [b][color=#BD00FF]scalability[/color][/b] and [b][color=#BD00FF]usability[/color][/b] to dApps for mass market adoption[/td][td][size=30px][color=#00fff9]│[/td][td][size=1px]. [b][color=#381D75][size=10px]TOKEN EVENT [size=12px][url=https://cardstack.com/][color=#6537FF]GET ON WHITELIST[/url][/b] [size=5px]. [size=10px][url=https://twitter.com/cardstack][color=#381D75]Twitter[/url] ⦁ [url=https://telegram.me/cardstack][color=#381D75]Telegram[/url] ⦁ [url=https://medium.com/cardstack][color=#381D75]Blog[/url] ⦁ [url=https://bitcointalk.org/index.php?topic=2768237.0][color=#381D75]Bitcointalk[/url][/td][/tr][/table][/center]
Miembro Héroes o Legendario [center][table][tr][td][url=https://cardstack.com/][size=2px][glow=#3c2282,2][tt][color=#37FF8B] ▄▄███▄▄ ███████████ ▄▄███▄▄ ▀▀███▀▀ ▄▄███▄▄ ████████████▄▄ ███████████ ▀▀████████████▄▄ ▀▀███▀▀ ▀▀████████████ [color=#00fff9] ▄▄███▄▄ [color=#37FF8B]▀▀███▀▀[/color] ▄▄███▄▄ ███████████▄▄ ███████████ ▀▀████████████▄▄ ▀▀███▀▀ ▀▀█████████████▄▄ ▄▄███▄▄ ▀▀█████████████▄▄ ████████████▄▄ ▀▀████████████ ▀▀████████████▄▄ ▀▀█████▀▀ ▀▀████████████ ▀▀█████▀▀ [/td][td][url=https://cardstack.com/][font=verdana][size=22px][glow=#3c2282,2][color=transparent].[color=#fff]CARDSTACK[color=transparent]..............[/size] [size=9px][glow=#3c2282,2][color=transparent]...[color=#fff]The Experience Layer of the Decentralized Internet[color=transparent]....[size=5px]. [size=2px][color=transparent][tt]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------[size=1px]-[/td][td][glow=#4429A3,2][size=5px][color=transparent][tt]-----------------------------------------------------------------------------------------[size=4px]-[/size] [size=12px]..[font=verdana][url=https://cardstack.com/][color=#fff]Bringing [color=#00fff9]scalability[/color] and [color=#37FF8B]usability[/color] to[tt][color=transparent]...[size=6px].[/size] [glow=#4429A3,2][color=transparent]..[font=verdana][color=#fff]dApps for mass market adoption[tt][color=transparent].....[size=7px]. [size=3px]-----------------------------------------------------------------------------------------------------------------------------------------------------[size=2px]-[/td][td][glow=#6537FF,2][size=4px][color=transparent][tt]------------------------------------------------------------------------------------------------------------------------[size=3px]- [size=10px][color=transparent]..[font=verdana][b][color=#fff][size=10px]TOKEN EVENT [glow=#15FFF9,2][size=12px][color=transparent].[url=https://cardstack.com/][font=verdana][color=#3c2282]GET ON WHITELIST[/url][color=transparent].[/b][/glow][glow=#6537FF,2][tt][color=transparent]..[size=2px]. [size=6px][color=transparent]--------------------------------------------------------------------------------[size=3px]- [size=10px][color=transparent]---[font=verdana][url=https://twitter.com/cardstack][color=#15FFF9]Twitter[/url] ⦁ [url=https://telegram.me/cardstack][color=#15FFF9]Telegram[/url] ⦁ [url=https://medium.com/cardstack][color=#15FFF9]Blog[/url] ⦁ [url=https://bitcointalk.org/index.php?topic=2768237.0][color=#15FFF9]Bitcointalk[/url][tt][color=transparent]---[size=4px]-[/td][/tr][/table][/center][/quote]
Texto personal: "La experiencia en la Internet descentralizada" CAMPAÑA DE CREACIÓN DE CONTENIDO
Corre la voz con tu contenido original y gana tokens por: - Blogueando sobre Cardstack, - promocionándolo en otros foros, en su grupo de Facebook/LinkedIn o en cualquier otro medio social con un gran alcance - crear videos de YouTube (incluidas entrevistas) El 35% de la asignación (0.105% de tokens levantados) se reservará para creadores de contenido VIP solo para invitados. Las apuestas obtenidas dependen de la calidad (decidida por AmaZix / Cardstack después de la revisión): Rechazado: 0 participaciónBajo: 1 participaciónMedio: 2 participaciónAlto: 3 participación(por publicación / video) volver a publicar en otro sitio (relevante) ganará un 50% extra de apuestas (se permite una nueva republicación por artículo) Solicitud:1. Complete y envíe el siguiente formulario (una vez que suban sus videos o se publiquen sus artículos): https://goo.gl/forms/O7d2ad6D3Uov9GIq22. Publica un enlace a tu artículo / video en el hilo ingles: https://bitcointalk.org/index.php?topic=2805234.0Reglas:1. El blog / foro debe enfocarse en un tema relevante (a exclusivo criterio de Amazix / Cardstack) 2. Las publicaciones del blog deben tener al menos 250 palabras y las publicaciones del foro deben tener al menos 100 palabras. 3. También se pueden aceptar blogs / foros / videos en idiomas distintos del inglés (a exclusivo criterio de Amazix / Cardstack ). Por favor, póngase en contacto conmigo primero para verificar. NOTA: CUALQUIER ARTÍCULO / VÍDEO NO PREAJUSTADO CREADO EN UN LENGUAJE EXTRANJERO SERÁ RECHAZADO AUTOMÁTICAMENTE (SE OTORGAN 0 PARTICIPACIONES) 4. Los videos deben ser significativos y estar relacionados con Cardstack : venta de tokens, aspectos del Whitepaper, big data, tecnología relacionada, etc. 5. Todos los artículos deben contener enlaces al sitio web de Cardstack , al grupo Telegram y a los hilos de ANN / Bounty. 6. Los videos / artículos con visualizaciones falsas serán descalificados. 7. Solo se aceptará contenido original. 8. No se tolerará el spamming / posting en los subforos incorrectos. Las publicaciones borradas o cerradas por la administración del foro no contarán.
CAMPAÑA DE FACEBOOK
Las participaciones se pagarán dependiendo de la cantidad de amigos/seguidores.
100-500 Seguidores/Amigos: 1 participación por acción+me gusta 500-1500 Seguidores/Amigos: 2 participaciones por cada acción+me gusta 1500-3000 Seguidores/Amigos: 4 participaciones por acción+me gusta 3000 Plus Seguidores/Amigos: 6 participaciones por acción+me gusta
Mínimo de 3 acciones compartidas por semana Máximo 4 acciones compartidas por día y 20 acciones compartidas por semana
Solicitud1. Siga y como la página de Facebook de Cardstack : https://www.facebook.com/cardstackproject2. Rellene y envíe este formulario: https://goo.gl/forms/VKW8imgoSXToJaAq23. Registre sus acciones todas las semanas en el foro con este formato: [b]FACEBOOK REPORT[/b] ###FACEBOOK SEMANA X###
1 <compartir link de publicación> 2 <compartir link de publicación> 3 ... 4 5
Reglas:1. Los participantes deben compartir y poner me gusta en los mensajes de Cardstack 2. Las cuentas con amigos / seguidores falsos serán descalificadas 3. Amigos / seguidores NO se actualizarán después de haberse registrado en la campaña 4. Todos los artículos compartidos también deben ser del agrado 5. Por favor NO publique comentarios basura, no es necesario ni buscado 6. Las publicaciones / participaciones deben tener un enlace al sitio web de Cardstack o al grupo Telegram Y al menos 2 de estos hashtags: #Crypto #Blockchain #ICO #Crowdfunding #Cardstack #dApps. DEBE INCLUIR ESTOS EN SUS ACCIONES, de lo contrario no se contarán 7. Las publicaciones / participaciones deben espaciarse al menos 1 hora. Cualquier persona que viole esta regla será excluida de la campaña de recompensas
CAMPAÑA DE YOUTUBE
CAMPAÑA DE CRIPTO COMPARACION
Sigue A Cardstack en CryptoCompare y gana algunos tokens
1 participación por seguidor
Solicitud Abra una cuenta en Cryptocompare y siga Cardstack Envíe este formulario: [en proceso]
BONOS
2.5% de los tokens están reservados para los participantes en recompensas que hacen un esfuerzo adicional y hacen un esfuerzo especial para promocionar nuestra venta de tokens. Estos tokens se asignarán a exclusivo criterio de AmaZix/Cardstack (por lo que no aceptaremos ninguna objeción sobre la forma en que se distribuyen).
Algunas actividades que podrían ser dignas de estos tokens son: Contenido con una calidad especialmente alta o gran alcance Apertura de nuevos canales para la promoción de la venta Actividad superior a la media en grupos de Telegram o hilos ANN (no es obligatorio)
CAMPAÑA DE TELEGRAM( Para dueños de grupos)
Corre la voz en tu grupo de Telegram sobre Cardstack y gana algunos tokens 100-249 Miembros: 1 participación / publicación 250-749 Miembros: 2 participación / publicación 750-2499 Miembros: 4 participación / publicación Más de 2500 miembros: 6 participaciones / publicación SolicitudEnvíe este formulario: https://goo.gl/forms/upObdDc0bYbsKoLN22. Invita a @jamalbtc al grupo 3. Una vez aprobado, recibirás un discurso para publicar en el grupo 4. Cargue la captura de pantalla (usando imgur, postimage o similar) y repórtelo en el hilo con este formato: #### TELEGRAM WEEK X #### Enlace a la publicación de Telegram Reglas1. Se permite un máximo de 1 publicación por semana en cada grupo 2. Los grupos con miembros falsos (invitados sin permiso) serán descalificados
REGLAS GENERALES:1. El Administrador de programa de Recompensas y el Equipo se reservan el derecho de hacer cambios a los términos en cualquier momento. 2. Las direcciones de pago NO se modificarán después de la presentación. 3. Cualquier tipo de comportamiento ofensivo o inadecuado al promocionar Cardstack resultará en la descalificación inmediata de la campaña de recompensas 4. Los decisiones del Administrador del programa de recompensas/equipo Cardstack son finales. 5. Para consultas o quejas, complete y envíe este formulario, NO HAY PREGUNTAS QUE SE ENTREGARAN A TRAVÉS DE PM (mensaje privado): https://goo.gl/forms/GQWSdQaMu6fcty7V2 [/code]
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 23, 2018, 08:29:56 PM Last edit: March 09, 2018, 08:47:15 PM by rDieminger |
|
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 10:40:46 AM Last edit: March 07, 2018, 09:40:04 PM by rDieminger |
|
■ Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog ■
¦ Bounty oficial en ingles | ANN en español ¦
¿Qué es Cardstack?Cardstack es un framework, un SDK, un marco de código abierto y un protocolo de consenso que crea un entorno de software centralizado que puede desafiar a los superpoderes digitales de hoy en día. En otras palabras, Cardstack agrega una experiencia revolucionaria que hace que una tecnología de cadena de bloques sea utilizable y escalable ya que crea un ecosistema de software centralizado que puede competir con las plataformas digitales. La tecnología como la del bitcoin, estableció un camino donde el encadenamiento de bloques ofrece la seguridad y la inviolabilidad necesaria para seguir creciendo, pero también ha beneficiado a personas malintencionadas, como los hackers. El enfoque de descentralización de Cardstack’s permite a los usuarios a tener un control sobre los temas de interes, ya que todo esta centrado en capas que facilitan la interacción con aplicaciones o servicios.
■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 11:06:25 AM Last edit: March 07, 2018, 09:40:43 PM by rDieminger |
|
■ Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog ■
¦ Bounty oficial en ingles | ANN en español ¦
Enfoque de Cardstack ,Cardstack quiere redirigir conceptos verticales a capas horizontales, conformada por una capa de experiencia dencentralizada en Internet, esto permite que un fácil manejo de las aplicaciones locales, las aplicaciones en la nube y las aplicaciones dApps Además, la combinación de experiencia descentralizada en Internet, junto a la cadena de bloques, y los dispositivos esta permitiendo que los usaurios vayan aprendiendo a trabajar con múltiples aplicaciones en sus dispositivos, nubes y cadenas de bloques para satisfacer plenamente sus necesidades. La solución de Cardstack’sCardstack está creando una nueva capa de experiencia que ayuda a los usuarios a organizar su interacción en las aplicaciones (d) mientras mantiene la aceptación colectiva del mercado de las tecnologías centralizadas en un ecosistema abierto. En resumen, el nuevo enfoque debería colocar a los usuarios en el centro y permitirles actuar como tal; para que las interacciones con las aplicaciones y los servicios se realicen a través de una pila de software controlada por los usuarios. Además, la disposición necesaria para superponer la experiencia de Internet descentralizada puede hacerse intuitiva al sugerir el siguiente flujo de movimiento encadenando las capas respectivas convirtiendo cada estado de una aplicación en una disposición visual de la información relevante.
■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 11:09:04 AM Last edit: March 07, 2018, 09:41:02 PM by rDieminger |
|
Con Cardstack, los usuarios finales pueden mezclar y combinar funciones de múltiples aplicaciones o DAPP sin preocuparse por la complejidad de las suscripciones en la nube o los temas vinculados a los servicios. Aún más emocionante: el sistema permite a los usuarios diseñar flujos de trabajo increíblemente nuevos para participar en servicios de diferentes capas de Internet; esto no hubiera sido posible en un mundo centralizado. La presente invención es posible gracias al paradigma de diseño asociativo que convierte a Cardstack en: ■ Unidades expansibles, ■ Integradas, ■ Encadenadas, ■ Activadas, ■ Versionadas, ■ Clonadas, ■ Aprobadas, ■ Revocadas o ■ Grabadas para siempre en una pieza de capas encapsuladas. En un mundo descentralizado, sus datos deben estar en red o ser soberanos como lo desee. Los desarrolladores pueden el framework de Cardstack , un SDK completo para crear aplicaciones poderosas de bloqueo basadas en tarjetas. Construya cualquier cosa usando conceptos modulares y contenedores. Cree fácilmente flujos de trabajo personalizados utilizando Cardstack Hub, que organiza la transferencia de datos y valores en múltiples cadenas de bloques y nubes. Utilice funciones precompiladas, como: ■ Índices de búsqueda, ■ Notificaciones en tiempo real, ■ Permisos de usuario , ■ Distribución flexible de contenedores y ■ mucho más. Todo es ampliable y la fuente es 100% código abierto. ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 11:13:27 AM Last edit: March 07, 2018, 09:41:19 PM by rDieminger |
|
■ Website |Libro blanco |Facebook |Twitter | Telegram Ingles| Reddit| Blog ■
¦ Bounty oficial en ingles | ANN en español ¦
El ecosistema CardStackEste ecosistema se rige por contratos inteligentes respaldados por el token Cardstack llamado CARD, esta construido sobre la tecnología ERC20 de la red Ethereum. CARD no es solo una unidad de criptografía: sino que está especialmente diseñada para crear un mercado sostenible donde los desarrolladores de código abierto son altamente recompensados, lo que permite a los usuarios seleccionar la combinación perfecta de servicios de software que satisfagan sus necesidades. Cuando un usuario usa CARD, crea contratos inteligentes entre el usuario y las aplicaciones seleccionadas . Con base en los datos de uso totalmente anónimos seguidos por los contratos inteligentes, lo recopilado se distribuyen regularmente a los creadores y colaboradores de la aplicación de acuerdo con un modelo dinámico de pago algorítmico y gobernanza en manos de la comunidad. Al igual que otras monedas criptográficas, los usuarios de CARD pueden ser mineros para verificar transacciones y obtener ingresos. Sin embargo, a diferencia de Bitcoin, que obliga a los mineros a resolver problemas matemáticos, los mineros analíticos de Cardstack hacen que el sistema sea justo y flexible al ayudar a calcular la función de recompensa . Los resultados de los mineros analíticos compiten en un esquema de clasificación llamado prueba analítica, por lo que los algoritmos de adjudicación nunca están bajo el control de una sola parte, sino que tienen un control distribuido en el ecosistema.
■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 11:15:27 AM Last edit: March 07, 2018, 09:46:01 PM by rDieminger |
|
■ Para usuarios finalesPermite mezclar y combine múltiples dApps y aplicaciones en la nube Permite creer combinaciones increíbles de flujos de trabajo y aplicaciones usando Cardstack Hub Permite mediante el uso de un token (CST) establecer los acuerdos de retención con todos los servicios que necesita Permite que sus datos lleguen fácilmente a cualquier parte con nuestra experiencia de usuario. Permite un comienzo rápido en moneda Fiat: no se requiere experiencia criptográfica ■ Para desarrolladoresprovee un completo SDK para crear aplicaciones potentes, hermosas y extensibles Permite un acceso a una biblioteca completa de la poderosa funcionalidad emergente del sisetma Mejore su experiencia de aplicación usando Cardstack agregación fuera de la cadena Se paga de manera justa por el algoritmo de pago y gobernanza operado por la comunidad. Obtenga un reembolso por sus costos de materiales. Mantenga las cosas al 100% en código abierto. ■ Para MinerosHaga un trabajo útil en el empoderamiento impulsado por algoritmos, que proporciona una distribución justa de la riqueza Ayude a proteger el sistema de los ataques de agentes extremos, maliciosos y correo no deseado Cargos como los de las tarjetas eBoard pueden ser devueltas al ecosistema Puede ser compensado por un esquema de clasificación que bloquea las únicas partes que controlan la función de adjudicación ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 11:47:53 AM Last edit: March 07, 2018, 09:46:24 PM by rDieminger |
|
ardstack proporciona un conjunto de herramientas que desbloquean el potencial de la Internet descentralizada para todos: un salto para la cadena de bloques en cada piso de la pila de software. Ventana para desarrollo de App Cardstack Framework es un SDK completo para crear aplicaciones de bloqueo potentes y consistentes. Básicamente, hay un concentrador Cardstack que organiza transferencia de datos y valores en múltiples cadenas de bloques y nubes. El protocolo de negociación Las dApps alimentadas por Cardstack pueden utilizar el protocolo Tally, que da a los daPP la capacidad de realizar cálculos complejos para organizar grandes redes de usuarios, como ser: ■ Recolectar pagos, ■ Contar votos y ■ Recompensar trabajos. Ecosistema del token Los desarrolladores pueden obtener aplicaciones basadas en Cardstack a través de contratos inteligentes respaldados por Cardstack Token (CST), un token que usa la tecnología ERC20 basado en Ethereum, diseñado para recompensar justamente a las comunidades basadas en Cardstack. Promoción del Token Es un catalizador para un movimiento global hacia un mercado de software sostenible basado en código fuente abierto respaldado por la criptoeconomía. Los detalles del token Cardstack están en la última revisión y se publicarán en breve. Esto incluye información sobre los criterios de pre asignación y el mecanismo de recaudación de fondos. ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:03:16 PM Last edit: March 07, 2018, 09:47:02 PM by rDieminger |
|
En Cardstack están construyendo un marco de aplicaciones que permitirá a los desarrolladores crear y alojar dApps( aplicaciones decentralizadas), que pongan la experiencia del usuario como algo primordial. Como parte de este esfuerzo, van a crear un token extensible. → Si le agrada la temática Ingrese en : https://cardstack.com/■ Contratos Actualizables.Entonces, ¿por qué son importantes los contratos actualizables? Los requisitos cambian, el mercado cambia, el mundo se vuelve más complejo, un químico diría que la entropía del universo aumenta de forma natural. El software, al igual que la biología, se encuentra en constante cambio y evolución. El software más exitoso es el software que se adapta mejor a un mundo cambiante. Un contrato inteligente no es tan inteligente si no puede evolucionar con el tiempo. Cardstack ha encontrado una manera de resolver este problema crucial.■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:06:21 PM Last edit: March 07, 2018, 09:47:21 PM by rDieminger |
|
El núcleo del enfoque que han tomado en Cardstack estuvo muy influenciado por la publicación de la bloguera llamada Elena Dimitrova sobre cómo COLONY construye contratos ampliables. Específicamente, lo más importante a considerar cuando se actualizan contratos es cómo preservar el estado del contrato original en el contrato actualizado. En un enfoque clásico de ingeniería de software, Elena describe cómo el estado del contrato puede separarse de la funcionalidad del contrato. Este enfoque permite que múltiples contratos compartan el mismo estado. Cuando desarrollaron ese enfoque, agregaron una componente adicional a la solución: esto es, un “contrato de registro”. El contrato de registro realiza la contabilidad necesaria para realizar un seguimiento del estado del contrato compartido, realizar un seguimiento de las diferentes versiones de cada contrato y vincular y desvincular el estado compartido a los contratos a medida que se agregan nuevas versiones de los contratos a la red. Puede parecer difícil de comprender, pero es una genialidad El contrato de registro actúa como un puente entre el Servicio de nombres de Ethereum (ENS) y la última versión de los registros de contratos de Cardstack. ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:09:23 PM Last edit: March 07, 2018, 09:49:00 PM by rDieminger |
|
Al igual que en el enfoque descrito en la publicación de Elena, CardStack ha creado un “contrato de almacenamiento” que básicamente actúa como un cubo, elevando el estado de una versión de contrato a la siguiente. En ese contrato de almacenamiento, se puede registrar muchos tipos diferentes de datos en un almacén especial. También han creado un “contrato de Libro mayor”, como en el enfoque de “Colony”, pero es una forma especializada de un contrato de almacenamiento diseñado específicamente para blockchain. pragma solidity ^0.4.18;
import "zeppelin-solidity/contracts/math/SafeMath.sol"; import "./administratable.sol";
contract ExternalStorage is administratable { using SafeMath for uint256;
mapping(bytes32 => mapping(address => mapping(address => uint256))) MultiLedgerStorage; mapping(bytes32 => uint256) public primaryLedgerCount; mapping(bytes32 => mapping(address => bool)) public ledgerPrimaryEntries; mapping(bytes32 => mapping(uint256 => address)) public primaryLedgerEntryForIndex; mapping(bytes32 => mapping(address => uint256)) public secondaryLedgerCount; mapping(bytes32 => mapping(address => mapping(address => bool))) public ledgerSecondaryEntries; mapping(bytes32 => mapping(address => mapping(uint256 => address))) public secondaryLedgerEntryForIndex;
function getMultiLedgerValue(string record, address primaryAddress, address secondaryAddress) public view returns (uint256) { return MultiLedgerStorage[keccak256(record)][primaryAddress][secondaryAddress]; }
function setMultiLedgerValue(string record, address primaryAddress, address secondaryAddress, uint256 value) public onlyAdmins { bytes32 hash = keccak256(record); uint256 primaryLedgerIndex = primaryLedgerCount[hash]; uint256 secondaryLedgerIndex = secondaryLedgerCount[hash][primaryAddress]; if (!ledgerSecondaryEntries[hash][primaryAddress][secondaryAddress]) { secondaryLedgerEntryForIndex[hash][primaryAddress][secondaryLedgerIndex] = secondaryAddress; secondaryLedgerCount[hash][primaryAddress] = secondaryLedgerIndex.add(1); ledgerSecondaryEntries[hash][primaryAddress][secondaryAddress] = true;
if (!ledgerPrimaryEntries[hash][primaryAddress]) { primaryLedgerEntryForIndex[hash][primaryLedgerIndex] = primaryAddress; primaryLedgerCount[hash] = primaryLedgerIndex.add(1); ledgerPrimaryEntries[hash][primaryAddress] = true; } }
MultiLedgerStorage[hash][primaryAddress][secondaryAddress] = value; }
mapping(bytes32 => mapping(address => uint256)) LedgerStorage; mapping(bytes32 => uint256) public ledgerCount; mapping(bytes32 => mapping(address => bool)) public ledgerAccounts; mapping(bytes32 => mapping(uint256 => address)) public ledgerEntryForIndex;
function getLedgerValue(string record, address _address) public view returns (uint256) { return LedgerStorage[keccak256(record)][_address]; }
function getLedgerCount(string record) public view returns (uint256) { return ledgerCount[keccak256(record)]; }
function setLedgerValue(string record, address _address, uint256 value) public onlyAdmins { bytes32 hash = keccak256(record); if (!ledgerAccounts[hash][_address]) { uint256 ledgerIndex = ledgerCount[hash]; ledgerEntryForIndex[hash][ledgerIndex] = _address; ledgerCount[hash] = ledgerIndex.add(1); ledgerAccounts[hash][_address] = true; }
LedgerStorage[hash][_address] = value; }
mapping(bytes32 => mapping(address => bool)) BooleanMapStorage; mapping(bytes32 => uint256) public booleanMapCount; mapping(bytes32 => mapping(address => bool)) public booleanMapAccounts; mapping(bytes32 => mapping(uint256 => address)) public booleanMapEntryForIndex;
function getBooleanMapValue(string record, address _address) public view returns (bool) { return BooleanMapStorage[keccak256(record)][_address]; }
function getBooleanMapCount(string record) public view returns (uint256) { return booleanMapCount[keccak256(record)]; }
function setBooleanMapValue(string record, address _address, bool value) public onlyAdmins { bytes32 hash = keccak256(record); if (!booleanMapAccounts[hash][_address]) { uint256 ledgerIndex = booleanMapCount[hash]; booleanMapEntryForIndex[hash][ledgerIndex] = _address; booleanMapCount[hash] = ledgerIndex.add(1); booleanMapAccounts[hash][_address] = true; }
BooleanMapStorage[hash][_address] = value; }
mapping(bytes32 => uint256) UIntStorage;
function getUIntValue(string record) public view returns (uint256) { return UIntStorage[keccak256(record)]; }
function setUIntValue(string record, uint256 value) public onlyAdmins { UIntStorage[keccak256(record)] = value; }
mapping(bytes32 => bytes32) Bytes32Storage;
function getBytes32Value(string record) public view returns (bytes32) { return Bytes32Storage[keccak256(record)]; }
function setBytes32Value(string record, bytes32 value) public onlyAdmins { Bytes32Storage[keccak256(record)] = value; }
mapping(bytes32 => address) AddressStorage;
function getAddressValue(string record) public view returns (address) { return AddressStorage[keccak256(record)]; }
function setAddressValue(string record, address value) public onlyAdmins { AddressStorage[keccak256(record)] = value; }
mapping(bytes32 => bytes) BytesStorage;
function getBytesValue(string record) public view returns (bytes) { return BytesStorage[keccak256(record)]; }
function setBytesValue(string record, bytes value) public onlyAdmins { BytesStorage[keccak256(record)] = value; }
mapping(bytes32 => bool) BooleanStorage;
function getBooleanValue(string record) public view returns (bool) { return BooleanStorage[keccak256(record)]; }
function setBooleanValue(string record, bool value) public onlyAdmins { BooleanStorage[keccak256(record)] = value; }
mapping(bytes32 => int) IntStorage;
function getIntValue(string record) public view returns (int) { return IntStorage[keccak256(record)]; }
function setIntValue(string record, int value) public onlyAdmins { IntStorage[keccak256(record)] = value; } } ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:11:21 PM Last edit: March 07, 2018, 09:49:24 PM by rDieminger |
|
El módulo llamado ExternalStorage.sol es el “contrato de almacenamiento”. En él se puede ver que se ofrecen slots para almacenar todo tipo de datos, incluidas estructuras más complejas como libros reales e incluso “libros múltiples”, que es un mapa de libros contables. Esto es lo que usan para almacenar las asignaciones para la función transferFrom()ERC20 del contrato de Cardstack. Para cada tipo, tienen un parámetro de recordque es la “clave” en el almacén de valores clave del contrato de almacenamiento. En su contrato de biblioteca de token, se puede ver cómo establecen y obtienen esos valores de almacenamiento: pragma solidity ^0.4.18; import "./ExternalStorage.sol";
library CstLibrary {
function getTokenName(address _storage) public view returns(bytes32) { return ExternalStorage(_storage).getBytes32Value("cstTokenName"); }
function setTokenName(address _storage, bytes32 tokenName) public { ExternalStorage(_storage).setBytes32Value("cstTokenName", tokenName); }
function getTokenSymbol(address _storage) public view returns(bytes32) { return ExternalStorage(_storage).getBytes32Value("cstTokenSymbol"); }
function setTokenSymbol(address _storage, bytes32 tokenName) public { ExternalStorage(_storage).setBytes32Value("cstTokenSymbol", tokenName); }
function getBuyPrice(address _storage) public view returns(uint256) { return ExternalStorage(_storage).getUIntValue("cstBuyPrice"); }
function setBuyPrice(address _storage, uint256 value) public { ExternalStorage(_storage).setUIntValue("cstBuyPrice", value); }
function getSellPrice(address _storage) public view returns(uint256) { return ExternalStorage(_storage).getUIntValue("cstSellPrice"); }
function setSellPrice(address _storage, uint256 value) public { ExternalStorage(_storage).setUIntValue("cstSellPrice", value); }
function getCirculationCap(address _storage) public view returns(uint256) { return ExternalStorage(_storage).getUIntValue("cstCirculationCap"); }
function setCirculationCap(address _storage, uint256 value) public { ExternalStorage(_storage).setUIntValue("cstCirculationCap", value); }
function getVestingRevocable(address _storage, address beneficiary) public view returns(bool) { return ExternalStorage(_storage).getBooleanMapValue("cstVestingRevocable", beneficiary); }
function setVestingReleasedAmount(address _storage, address beneficiary, uint256 value) public { ExternalStorage(_storage).setLedgerValue("cstVestingReleasedAmount", beneficiary, value); }
function getVestingReleasedAmount(address _storage, address beneficiary) public view returns(uint256) { return ExternalStorage(_storage).getLedgerValue("cstVestingReleasedAmount", beneficiary); } function getAllowance(address _storage, address account, address spender) public view returns (uint256) { return ExternalStorage(_storage).getMultiLedgerValue("cstAllowance", account, spender); }
function setAllowance(address _storage, address account, address spender, uint256 allowance) public { ExternalStorage(_storage).setMultiLedgerValue("cstAllowance", account, spender, allowance); }
. . . }
■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:15:11 PM Last edit: March 07, 2018, 09:49:36 PM by rDieminger |
|
Otra cosa interesante a tener en cuenta es que: Han hecho un trabajo adicional en nuestro contrato de almacenamiento para permitir que nuestros libros mayores (y libros múltiples) sean iterables, de modo que el almacenamiento sea más fácilmente introspectado. Cuesta más gas para mantener tales estructuras; pero para los casos de uso específicos, entendieron que valía la pena compensar las tarifas adicionales de gas. Para completar, la forma especializada del almacenamiento del libro mayor de cardstack, aparece a continuación: pragma solidity ^0.4.18;
import "./administratable.sol"; import "zeppelin-solidity/contracts/math/SafeMath.sol";
contract ITokenLedger { function totalTokens() public view returns (uint256); function totalInCirculation() public view returns (uint256); function balanceOf(address account) public view returns (uint256); function mintTokens(uint256 amount) public; function transfer(address sender, address reciever, uint256 amount) public; function creditAccount(address account, uint256 amount) public; function debitAccount(address account, uint256 amount) public; function addAdmin(address admin) public; function removeAdmin(address admin) public; }
contract CstLedger is ITokenLedger, administratable {
using SafeMath for uint256;
uint256 public _totalInCirculation; // warning this does not take into account unvested nor vested-unreleased tokens into consideration uint256 public _totalTokens; mapping (address => uint256) public _balanceOf; uint256 public ledgerCount; mapping (uint256 => address) public accountForIndex; mapping (address => bool) public accounts;
function totalTokens() public view returns (uint256) { return _totalTokens; }
function totalInCirculation() public view returns (uint256) { return _totalInCirculation; }
function balanceOf(address account) public view returns (uint256) { return _balanceOf[account]; }
function mintTokens(uint256 amount) public onlyAdmins { _totalTokens = _totalTokens.add(amount); }
function makeAccountIterable(address account) internal { if (!accounts[account]) { accountForIndex[ledgerCount] = account; ledgerCount = ledgerCount.add(1); accounts[account] = true; } }
function transfer(address sender, address recipient, uint256 amount) public onlyAdmins { require(_balanceOf[sender] >= amount);
_balanceOf[sender] = _balanceOf[sender].sub(amount); _balanceOf[recipient] = _balanceOf[recipient].add(amount); makeAccountIterable(recipient); }
function creditAccount(address account, uint256 amount) public onlyAdmins { // decrease asset/increase liability: remove tokens require(_balanceOf[account] >= amount);
_totalInCirculation = _totalInCirculation.sub(amount); _balanceOf[account] = _balanceOf[account].sub(amount); }
function debitAccount(address account, uint256 amount) public onlyAdmins { // increase asset/decrease liability: add tokens _totalInCirculation = _totalInCirculation.add(amount); _balanceOf[account] = _balanceOf[account].add(amount); makeAccountIterable(account); } } ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:18:46 PM Last edit: March 07, 2018, 09:49:48 PM by rDieminger |
|
Puede ver cómo usan su almacenamiento de contabilidad en el contrato principal de tokens ERC20. A continuación hay un ejemplo de algunas de las funciones del ERC20 que aprovechan el almacenamiento específico del libro mayor: pragma solidity ^0.4.18;
import "zeppelin-solidity/contracts/ownership/Ownable.sol"; import "zeppelin-solidity/contracts/math/SafeMath.sol"; import "./ERC20.sol"; import "./freezable.sol"; import "./CstLedger.sol"; import "./ExternalStorage.sol"; import "./Registry.sol"; import "./CstLibrary.sol"; import "./displayable.sol"; import "./upgradeable.sol"; import "./configurable.sol"; import "./storable.sol";
contract CardstackToken is ERC20, Ownable, freezable, displayable, upgradeable, configurable, storable {
using SafeMath for uint256; using CstLibrary for address;
ITokenLedger public tokenLedger; address public externalStorage;
. . . function totalSupply() public view unlessFrozen unlessUpgraded returns(uint256) { return tokenLedger.totalTokens(); }
function tokensAvailable() public view unlessFrozen unlessUpgraded returns(uint256) { return totalSupply().sub(totalInCirculation()); }
function balanceOf(address account) public view unlessUpgraded unlessFrozen returns (uint256) { address thisAddress = this; if (thisAddress == account) { return tokensAvailable(); } else { return tokenLedger.balanceOf(account); } }
function transfer(address recipient, uint256 amount) public unlessFrozen unlessUpgraded returns (bool) { require(amount > 0); require(!frozenAccount[recipient]);
tokenLedger.transfer(msg.sender, recipient, amount); Transfer(msg.sender, recipient, amount);
return true; }
function mintTokens(uint256 mintedAmount) public onlySuperAdmins unlessFrozen unlessUpgraded returns (bool) { tokenLedger.mintTokens(mintedAmount);
Mint(mintedAmount, tokenLedger.totalTokens(), circulationCap);
Transfer(address(0), this, mintedAmount);
return true; }
function grantTokens(address recipient, uint256 amount) public onlySuperAdmins unlessFrozen unlessUpgraded returns (bool) { require(!frozenAccount[recipient]);
tokenLedger.debitAccount(recipient, amount); Transfer(this, recipient, amount);
return true; } . . . } ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:24:30 PM Last edit: March 07, 2018, 09:52:13 PM by rDieminger |
|
El siguiente componente del enfoque actualizable de cardstack, es el registro. El registro crea una buena abstracción sobre las direcciones reales de Ethereum para los contratos que participan en nuestro ecosistema. La idea es que solo necesitamos saber el “nombre” de un contrato, y consultar el registro de la versión más reciente del contrato que tiene un nombre particular. Además, los contratos que necesitan usar el almacenamiento compartido no necesitan conocer la dirección del almacenamiento compartido; más bien, pueden declarar al registro su interés en utilizar un cubo de almacenamiento en particular (que también tiene un nombre), y el registro se ocupará de vincular el almacenamiento al contrato que haya declarado interés en usarlo. Entonces, a un nivel realmente alto, es el registro el que está haciendo el trabajo de mantener un registro de las direcciones de todos los contratos en nuestro sistema y mapear los nombres de los contratos en las direcciones de los contratos. ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:30:03 PM Last edit: March 07, 2018, 09:52:22 PM by rDieminger |
|
Después de implementar el contrato de almacenamiento, lo agregan al registro y asignan un nombre al contrato de almacenamiento, todo ello al llamar a la funciónregistry.addStorage(). De aquí en adelante, cuando los contratos se registran en el registro, pueden declarar su intención de usar el almacenamiento por su nombre. El registro es entonces responsable de resolver el nombre de almacenamiento en una dirección específica, así como otorgarle al contrato “permisos” para usar el almacenamiento (más sobre esto más adelante). registry.registerContract()Para los contratos que participan en el ecosistema y que no son contratos de almacenamiento, por ejemplo: El contrato de tokens, usan la función registry.registerContract() para agregarlos a nuestro registro. Sus bcontratos implementan una interfaz storable.sol, que tiene la siguiente declaración: pragma solidity ^0.4.18;
contract storable { function getLedgerNameHash() public view returns (bytes32); function getStorageNameHash() public view returns (bytes32); } ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:32:13 PM Last edit: March 07, 2018, 09:54:35 PM by rDieminger |
|
Como se puede observar, el nombre del libro mayor y el nombre de almacenamiento utilizados por el contrato del token se especifican en el constructor del contrato y luego se devuelven en la funciónstorable.sol Además, el token de contrato implementa una interfaz configurable.sol, que declara una función configureFromStorage(). En esta función, está el registro para resolver los nombres de almacenamiento a direcciones reales: . .
// In full disclosure, this is a simplification the actual function, i removed stuff // that wasn't germane to the conversation around upgradable contracts
configureFromStorage() public onlySuperAdmins unlessUpgraded returns (bool) { address ledgerAddress = Registry(registry).getStorage(ledgerName); address storageAddress = Registry(registry).getStorage(storageName); tokenLedger = ITokenLedger(ledgerAddress); externalStorage = storageAddress; return true; }
. . Y en este momento ya se tiene un token de contrato que está vinculado a los tokens de almacenamiento para los que ha declarado interés. ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:35:02 PM Last edit: March 07, 2018, 09:54:45 PM by rDieminger |
|
Entonces, un resumen rápido:Se Agregó almacenamiento al registro y se asignó un nombre al almacenamiento. Se creó un contrato (en este caso un contrato de token) que declara el interés en usar almacenamiento con un nombre específico. Se registró un contrato con el registro, que luego resuelve los nombres del almacenamiento a direcciones específicas de Ethereum dentro del contrato que se registra. upgradeContract()La capacidad de actualizar un contrato queda expresada en la función upgradeContract(). Los parámetros de esta función son el nombre del contrato y la dirección del contrato “sucesor” (donde el contrato actual se convierte en el contrato predecesor). El registro usará el mismo mecanismo que se aprovechó en el registro del contrato predecesor para descubrir el almacenamiento que el contrato sucesor ha declarado que está interesado en utilizar. El registro resuelve la dirección del almacenamiento en el contrato sucesor y vincula el almacenamiento dentro del contrato sucesor usando la función configureFromStorage(). Durante la operación de actualización, los permisos del contrato predecesor en el almacenamiento se revocan, de modo que ese contrato ya no puede manipular el almacenamiento. Del mismo modo, se otorgan los permisos del contrato sucesor sobre el almacenamiento, de modo que ese contrato puede manipular el almacenamiento. Además, el modificador,unlessUpgraded, evitará que se ejecuten las funciones de ese contrato predecesor y, en su lugar, hará que reviertan. El contrato predecesor también adquiere una propiedad que apunta al contrato sucesor como resultado de la actualización del contrato del contrato, por lo que los clientes del contrato pueden descubrir la nueva dirección del actualizada. Finalmente, se emite un evento llamando a ContractUpgraded cuando se actualizan los contratos (así como un evento llamando aAddrChangedpara el soporte de resolución ENS EIP-137, más sobre esto más adelante). ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
rDieminger (OP)
Member
Offline
Activity: 784
Merit: 64
■ Professional Spanish Translator
|
|
January 26, 2018, 12:37:21 PM Last edit: March 07, 2018, 09:55:01 PM by rDieminger |
|
Pero, ¿y los “permisos”?Se ha mencionado la palabra “permisos” varias veces en esta publicación. ¿Qué quieren decir con eso? Los contratos Cardstack tienen la capacidad de designar direcciones desde las cuales las llamadas msg.send pueden invocar funciones privilegiadas. Además, cardstack ha diseñado dos niveles diferentes de acceso privilegiado (es muy probable que haya muchos más, y probablemente querrán generalizar más esta solución a medida que pase el tiempo). El rol de menor nivel de acceso privilegiado es lo que Hassan Abdel-Rahman llama un “administrador”, y el rol de mayor nivel de acceso privilegiado es lo que llama un “super administrador”. En general, los administradores tienen la capacidad de modificar el almacenamiento, mientras que los superadministradores tienen la capacidad de crear administradores, registrar contratos y actualizar contratos. ■ ProgramadorHassan Abdel-Rahman Developer at Cardstack ■ Links de la empresahttps://cardstack.com/https://twitter.com/cardstackhttps://www.facebook.com/cardstackprojecthttps://medium.com/cardstack■ Chat Oficial de TelegramIngles: h Ingles: https://t.me/cardstackEspañol: Español: http://bit.ly/2FauvfP
|
|
|
|
|