Децентралізований краудфандинг для будь-яких проектів

Децентралізований краудфандинг для будь-яких проектів

Що мені не подобається в краудфандингових майданчиках:


- величезна комісія - до 10%;

- жорстка модерація - не будь-який проект можна опублікувати;

- відсутність мультимовного опису проектів і великі труднощі з переказом грошей, якщо бекер, наприклад, з Китаю;

- неможливість повернути хоча б частину грошей, якщо автор проекту не виконує свої зобов'язання в зазначений термін.

Всі перераховані вище проблеми я частково або повністю вирішив у своїй криптовалюті, в яку вбудував механізм децентралізованого краудфандингу.

У 2-х словах про те, що у мене вийшло

  • Механізм краудфандингу впроваджено в сам протокол Dcoin. Дані про проекти, бекери, коментарі копіюються на всі ноди. Жодні центральні сервери не потрібні (за винятком фотохостингів, типу imgur.com, для розміщення описів проектів).
  • Комісія 0,1% (дістається нодам, що підписують блок).
  • Розмістити можна абсолютно будь-який проект, ніхто не може заблокувати ні проект, ні гаманець.
  • Можна збирати кошти, залишаючись анонімним.
  • Можна додати опис 10 мовами.
  • Якщо вам потрібні рублі, то Ви можете збирати саме рублі. Якщо хтось із Китаю вирішив вкласти у Ваш проект 300 юанів, йому потрібно буде зайти на валютну біржу (до речі, теж децентралізовану і вбудовану в Dcoin) і обміняти юані на рублі.
  • Якщо проект набирає позначену суму, тоді автоматично випускається нова криптовалюта. Монети цієї валюти автоматично розподіляються між усіма бекерами пропорційно сумам, які вони вклали в проект. Монети проекту можна вільно продавати і купувати на біржах. Автор проекту повинен буде продати свій продукт за дану валюту. Таким чином, валюта виходить з обігу в той момент, коли автор проекту виконав свої зобов'язання. Якщо бекер передумав чекати, коли буде готовий продукт, то він може продати монети на біржі тим, хто готовий чекати до переможного кінця.

Про Dcoin

Dcoin - децентралізована криптовалюта, яка функціонує з квітня 2014 року. Має 2 типи акаунтів - анонімні та майнерські. Якщо купувати монети на біржі, то можна використовувати простий анонімний акаунт. Анонімні акаунти і кошти, що знаходяться на їх гаманцях неможливо ні заблокувати, ні видалити.

Ще трохи подробиць про Dcoin

Dcoin розробляю поодинці більше 3-х років. У Dcoin немає центральних серверів, так само як у Bitcoin у кожної ноди зберігається повна копія бази даних. Обмін новими даними між нодами відбувається за допомогою блоків. Кожен блок містить хеш попереднього блоку. Кожна транзакція від користувача містить підпис, який доводить, що транзакція саме від цього користувача.

На відміну від біткойна, в Dcoin не один, а 66 типів різних транзакцій, завдяки яким Dcoin може існувати в тому вигляді, в якому він представлений.

Приклад структури транзакції:

Поле

Опис

Розмір

TYPE

Тип транзакції

1 байт

TIME

Час транзакції

4 байти

USER_ID

ІД користувача, який створив транзакцію

5 байтів

CURRENCY_ID

ІД валюти

1-3 байти

AMOUNT

Розмір обіцяної суми

1-12 байт

VIDEO_TYPE

youtube,vimeo,youku,null

4-7 байт

VIDEO_URL_ID

ІД з відео-хостингу

5-32 байти

PAYMENT_SYSTEMS_IDS

ІД платіжних систем

1-24 байти

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,CURRENCY_ID,AMOUNT, VIDEO_TYPE,VIDEO_URL_ID,PAYMENT_SYSTEMS_IDS) від користувача USER_ID

від 128 до 4096 байт

Заголовок (TYPE,TIME,USER_ID) і SIGN - є у всіх транзакціях, а всі інші поля змінюються залежно від призначення транзакції.

Структура блоку:

Поле

Опис

Розмір

BLOCK_ID

Порядковий номер блоку

4 байти

TIME

Час, коли було створено блок

4 байти

USER_ID

ІД користувача, який створив блок

5 байтів

LEVEL

Рівень, на якому був майнер в момент створення блоку

2 байти

SIGN

Підпис від (TYPE, BLOCK_ID, PREV_BLOCK_HASH, TIME, USER_ID, LEVEL, MRKL_ROOT), зроблений за допомогою node-ключа

від 128 байтів до 512 байтів

TRANSACTIONS

Список транзакцій

До 3Mb

З більш детальним описом роботи Dcoin можна ознайомитися в wiki.

Додавання нового проекту

Запуск нового проекту дуже простий. Потрібно всього лише заповнити кілька полів.

Через кілька хвилин після відправки в DC-мережу, коли транзакція потрапить у блок, Ваш проект стане доступний для фінансування, і на нього вже можна буде відправляти монети.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

CURRENCY_ID

ІД валюти

AMOUNT

Бажана сума

END_TIME

Час закінчення збору коштів

LATITUDE

Широта

LONGITUDE

Довгота

CATEGORY_ID

ІД категорії

PROJECT_CURRENCY_NAME

Назва для нової криптовалюти

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,CURRENCY_ID,AMOUNT, END_TIME,LATITUDE,LONGITUDE,CATEGORY_ID,PROJECT_CURRENCY_NAME) від користувача USER_ID

Приклад транзакції

(
   [type] => 35
   [time] => 1408470376
   [user_id] => 1
   [currency_id] => 72
   [amount] => 1000
   [end_time] => 1409075213
   [latitude] => 39.94887
   [longitude] => -75.15005
   [category_id] => 4
   [project_currency_name] => TEST003
   [sign] => 820100701a18c4e8f3f92a109ff347784bcd1b78325e8ccbb4b69693b509a211212a7d3306268347c2228de0d395f11368358c52141c8fe6056d63b520942d8f1434722b5bdbf97c412099f20b3f82fc48dc484db93baf78084583134b0f0b9b667cabc5b842befa6ad4519677241f37de8ecdac6ac9026bfe2454810f267fe8f6547516e358cdf9eb3f705085833aa37f4c8a6cb046949f415085e56a537698b0c6d762840b82188ebfe86736d5b7ac47823bc4a25d72065208f082968377c902a757bfe6fd10225d1f7c96fcb860543d8e5c2cae92baa67fb705560e437141f6610798f58e6564b24ef8dbbc0a00011f7e21cc399f941babaab3637f6555f2077170
)

Після обробки такої транзакції створюється запис у таблиці cf_projects

Додавання опису проекту

Всього можна прикріпити до 10-и описів різними мовами. Описи можна додавати тільки у вигляді URL-картинок. Це необхідно для того, щоб перекласти відповідальність за вміст контенту з немодерованих нодів на хостинг, де буде розміщена картинка, а також - для економії місця в БД нодів.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

PROJECT_ID

ІД проекту

LANG_ID

ІД мови

BLURB_IMG

Зображення для каталогу

HEAD_IMG

Зображення для шапки

DESCRIPTION_IMG

Картинка-опис проекту

PICTURE

Головна картинка

VIDEO_TYPE

Якщо є відео, то video_type

VIDEO_URL_ID

Якщо є відео, то video_url_id

NEWS_IMG

Картинка новин проекту

LINKS

Посилання для зображення-опису у форматі [[«url1», x1, y1, x2, y2], [«url2», x1, y1, x2, y2],...]. до 512 знаків.

HIDE

Можна сховати, якщо випадково було додано опис непотрібною мовою

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,PROJECT_ID,LANG_ID, BLURB_IMG,HEAD_IMG,DESCRIPTION_IMG,PICTURE,VIDEO_TYPE,VIDEO_URL_ID,NEWS_IMG,LINKS,HIDE) від користувача USER_ID

Приклад транзакції

(
   [type] => 40
   [time] => 1408470908
   [user_id] => 1
   [project_id] => 4
   [lang_id] => 42
   [blurb_img] => http://i.imgur.com/BBnBbC5.png
   [head_img] => http://i.imgur.com/BBnBbC5.png
   [description_img] => 0
   [picture] => http://i.imgur.com/BBnBbC5.png
   [video_type] => youtube
   [video_url_id] => 0
   [news_img] => 0
   [links] => 0
   [hide] => 0
   [sign] => 82010085c558dd411e816f589d57e48a02bf9231c9dcc55994568e0e00a7db3980c7005d91e88815e5e5a3dc5908a7c4f97c1f973f7ba576c86621f59b608e9d84ce9595710050a42a72e12fa78eb6dd12f8ff90f7004d8b8426a7cf714d7707899e8aafd9dc4534b94292fe849cce765ca975af88f2524874e22439716a59d1473baf115da4d67193320a33f36a442aa1c9711c3145c7499c207fbcc2846f9712bb0dc96c6c59708fd8d25e36a631213679a060a728473be8f23b8f8591bce50b64c67cca00d970fce93a714d2678119b1e67324e9b462986d11239337532a179a6f455f68d3a2e59df24f34590bc032b7c8cc5d633add4bef4c8c18efe7100a5a873
)

Після обробки такої транзакції створюється запис у таблиці cf_projects_data, або, якщо запис з такою ж мовою для такого ж проекту вже є, то оновлюється існуючий.

Відправка монет у краудфандинг-проект

Для того щоб профінансувати якийсь проект, потрібно просто клікнути «Профінансувати», після чого відкриється ось така форма:

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

PROJECT_ID

ІД проекту

AMOUNT

Сума

COMMISSION

Комісія, яка дістанеться майнеру, який підписав блок

COMMENT

Примітка, зашифрована відкритим ключем автора проекту

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,PROJECT_ID,AMOUNT, COMMISSION, COMMENT) від користувача USER_ID

Приклад транзакції

(
   [type] => 48
   [time] => 1408471786
   [user_id] => 1
   [project_id] => 4
   [amount] => 100
   [commission] => 0.1
   [comment] => 4793010de6e65288fba7ba71e93883cafc0c724fb6306cc77b0525721b5e76883234997bcb4bda16e2568e5c1c30fb53fdb61999aa0c066189352d8ebc9d4dfb58d298d997cfdcf60c10d89815a4f620a68bbc690f95503e50e1913b3f82322df37895587413fde1b09c8acc4d746a145027b4753f180b073c31c8ab199f475d5c9c86841aaee506cb97bebe799e7497bf5765f848d9bfda3c58a44be9da4e86bb319d6580c5a35a8e49ec3a519bbfb53b33d590f691247929c2d489bcd8fa0d70c78c0b302edd39a474f116cfbf0d972ce0dee3999525d021161a6c5492c9a895eb01e764ee4fc1287ac41d3aea1b251108f362eb4984f01acf34ab0d202991
   [sign] => 820100766b5e41a7fcc473912dfc74afdd7f47dbacbf0a8ebd6b3f552a3d58972cbd979c61e1942b59b1cfaa74b89a8bbc30849b7e9942e1fd16be2a48ccc0b2ffb1152bc737967ec3330b4225b4f195d7d7f8356c15ab72ccbaed9587445bacd45f367d7d20a34ed546b0d48dafe1cb4cf3a3d3187a50a52eafd09d874da67f7e2ccfd861a17b5ee91bbcf5cd92565faf5b2d25d249d0f6fe307d63cb883343eb9c9be4ff4c0ed2ca83ea3e5e8c54bf9d780d819e3f5ca2495c5aab4dff6c34bfa8d5bde60beeb84c6474305c968920a5526a6c563c96abdd4a67efb793637d009f0878bbec56e277b87ad4675098a4eb650c6910ab973d7f72980554f068499a33ad
)

Після обробки такої транзакції створюється запис у таблиці cf_funding, де записується amount з транзакції, а у відправника ця сума списується з рахунку.

Якщо end_time проекту < = time з блоку, тоді проект закривається - в cf_projects в close_block_id вказується ID поточного блоку. Далі можливі 2 сценарії:

1. Потрібна сума набрана. У таблиці cf_currency створюється запис з назвою валюти проекту. Автору проекту нараховується зібрана сума. Бекерам нараховується валюта проекту пропорційно сумам, якими вони профінансували проект.

2. Потрібна сума не набрана. Всім бекерам повертаються монети, які вони відправляв в даний проект.

Скасування фінансування

Якщо Ви передумали, то до завершення проекту можете повернути свої монети. Потрібно просто натиснути cancel в списку операцій за Вашим рахунком.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

FUNDING_ID

ІД з таблиці cf_funding

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,FUNDING_ID) від користувача USER_ID

Приклад транзакції

(
   [type] => 44
   [time] => 1408472956
   [user_id] => 1
   [funding_id] => 40
   [sign] => 8201001245f8abcaf636c43ddecd54348c1f3462ce3ef3179c5da246e221f09567dc909ba1c477e62ed1a3bb4909230045eda3476c3a69ac602730f6f47955ca67b030011872b0f780c1f4a8e140f2e90e2f76de8781c372922c172c07e8065227f04fb7bf16b810c884f4c190915f9c9d40ee03bed24cfa239ef1400b536511150201a87c125467cc08253647d53381f75baf791f42d68cd707f61c13c4efeb780f1ae7ed3bb6915a4a4e666ace825bf64bdd0bc7246869cb1d1c76f16d377b9d543c085b1b4062e5602fe2bc919c6f54805a8ad1cd9fbb97e03e68c57f56eac96810a60f6d5529dcb143c39920bcd46391d489adf3bbddcea4d3fdbe9e53267ae828
)

Після обробки такої транзакції в таблиці cf_funding для зазначеного ID вказується del_block_id. І відправнику повертаються його монети.

Вилучення проекту

До завершення збору коштів Ви можете видалити свій проект. У цьому випадку всі кошти будуть повернені бекерам.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

PROJECT_ID

ІД проекту

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,PROJECT_ID) від користувача USER_ID

Приклад транзакції

(
   [type] => 46
   [time] => 1408473247
   [user_id] => 1
   [project_id] => 3
   [sign] => 82010034492a93753feb86a4ef56ec465f67eca9ad6969867e9f59ccbf93e5e729ea645de0848f5501366f4bc0db4be41ceef8fe0650962323b7ba41f328af4d2f3228a7a0ce0865b05d1e7e27c075f779db6af864b914281d97d5c4445ec94fe15667197496d7363a2036ed5d829ceeb73056e31888abc8988164a9ec30bd9f133776288bce53200654d09cd5630e57fb38ff8dfc7f820e37bf7985f20c29030f84abb6f03ebfc170fdee7ebec99c777a7bdd4ac01e2ea1a50cb88f7ae9f127cabe33fd3f4a25effd321f0fc5e3c196db64d51d4adfc52e0d878a5fb1f5863facabd34d33a41cfa62d196e67f5c209b48310e78524e3a3a2be1564a5eb7d5af3f33e4
)

Після обробки такої транзакції в таблиці cf_projects для даного проекту вказується del_block_id. І всім бекерам повертаються їхні монети.

Зміна категорії для проекту

Категорію проекту можна в будь-який момент змінити.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

PROJECT_ID

ІД проекту

CATEGORY_ID

ІД категорії

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,PROJECT_ID,CATEGORY_ID) від користувача USER_ID

Приклад транзакції

(
   [type] => 50
   [time] => 1408475554
   [user_id] => 1
   [project_id] => 4
   [category_id] => 13
   [sign] => 8201004155bf4df043e9c7d450d66ff24a6c139f0943fc1572b5ecb95cbaa0d390f374f1a3f968e779b7dc067aff5a7dfcd353d53aa533c0c4f85c429954176bcb2136e63fa985008b889c5aa69c2eb2c65d0bf08bcf61cc66da18d70df5e07d9fcb484207ea98fb60b2fca6e5657b7d0d3c55f13e6e3a12840eb7162807fc54be5af15b32403a40d33b11e8130cf152a204c5bc235cd5e1b7665083a26425807512b09a6adf894d2e2b9c74a88112bf4962e1592cdbdd2fbdf7095f1c70b599f2b8b3afcc9a47935f49696316bb76ede1b999a7b62fc6de138e1be9948f222df8ab57457325a3197a03ca1c954a75cc8ba830bc9adbf34a25c77ddfe97ba8ec76fba1
)

Після обробки такої транзакції в таблиці cf_projects для даного проекту змінюється category_id.

Коментарі

Коментарі можуть писати тільки ті, хто профінансував проект, або автор проекту. Не можна вилучати коментарі.

Як це виглядає зсередини

Структура транзакції

Поле

Опис

TYPE

Тип транзакції

TIME

Час транзакції

USER_ID

ІД користувача, який створив транзакцію

PROJECT_ID

ІД проекту

LANG_ID

ІД мови

COMMENT

Коментар

SIGN

Від 1 до 3-х підписів (TYPE,TIME,USER_ID,PROJECT_ID,LANG_ID,COMMENT) від користувача USER_ID

Приклад транзакції

(
   [type] => 47
   [time] => 1408475862
   [user_id] => 1
   [project_id] => 4
   [lang_id] => 42
   [comment] => Test
   [sign] => 820100beb4a532f32b465b86d4ad54245e121d083a031e75da6c270af906ea55914bbc51ec6dcbfde872600b3d154d7f72dc70706a76ef153ec693dc2baf8f5938e393dc91fdc376cf5beada0bcf51aa4d409cf802b01738aae8c709b7734d68a84addd8bebd9079a4843a746fa209e350b656dee5038540099e809de6850907103d41561ef67757a02f68f8f19822ed7e33a4698cc45d17c2de02ff8530dba4a9a9b3866a518e3aeb31488321439d31a24e8d5fbd711a2f120d6e714e061427916c9f22a7553395772aec400c8305d156b30bdd7ed568d1826f005b56a2ad2ac6aed607a1c204e8c39b07513435cff0b9c56746d39017f5dd4fe20b7ac2c83cb39959
)

Після обробки такої транзакції в таблиці cf_comments додається рядок з новим коментарем до проекту.

Ось і всі транзакції, які відповідають за функціонування краудфандингу в Dcoin.

Дизайнер з мене нікудишній, по-цьому, щоб не лякати людей своїми художествами, я перерисував дизайн сторінок з проектами у кікстертера.

«Все чи нічого»

Автор проекту не може забрати монети, якщо проект ще не завершився. Це потрібно для боротьби з шахрайством. Припустимо, набралося 80% від суми, і раптом хтось із бекерів з'ясовує, що це, наприклад, перепродаж якогось товару з ebay в абсолорого. Він пише про це в коментарях, і цей коментар бачать всі старі і нові бекери. Частина старих бекерів скасує свій платіж, проект не набере потрібної суми, і всі монети будуть повернуті.

Анонімність і безпека

З 3 ключами, прив'язаними до одного user_id, можна безпечно і анонімно користуватися Dcoin. Ви просто вбиваєте в браузері адресу будь-якого пулу, вводите 1-й ключ і потрапляєте в свій кабінет. У базі даних пулу не залишиться ніяких слідів Вашого перебування. У такому режимі можна переводити і отримувати монети, створювати і фінансувати краудфандинг-проекти. Якщо адмінпула вбудує скрипт, який буде відсилати на його сервер Ваш ключ, то він з ним нічого не зможе зробити, тому що для будь-якої транзакції від Вашого імені буде потрібно ще 2 підписи.