{"id":36114,"date":"2019-10-31T22:09:42","date_gmt":"2019-10-31T19:09:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves\/"},"modified":"2019-10-31T22:09:42","modified_gmt":"2019-10-31T19:09:42","slug":"detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves","title":{"rendered":"Dezentrale Affiliate-Programm mit Open-Source-Code auf der Waves-Blockchain.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ein dezentralisiertes Affiliate-Programm auf der Waves-Blockchain, realisiert im Rahmen eines Grants von Waves Labs durch das Team von Bettex.<\/p>\n<p><b class=\"spoiler_title\">Der Beitrag ist keine Werbung<\/b>! Das Programm ist Open Source, seine Nutzung und Verbreitung sind kostenlos. Der Einsatz des Programms f\u00f6rdert die Entwicklung von dApp-Anwendungen und tr\u00e4gt insgesamt zur Dezentralisierung bei, was jedem Nutzer des Netzwerks zugutekommt.<\/p>\n<p><img decoding=\"async\" alt=\"Dezentrale Affiliate-Programm mit Open-Source-Code auf der Waves-Blockchain.\" src=\"\/wp-content\/uploads\/2019\/07\/c123f3b230454f65fa76395979e962ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDie vorgestellte dApp f\u00fcr Affiliate-Programme ist eine Vorlage f\u00fcr Projekte, die Affiliate-Mechanismen als Teil ihrer Funktionalit\u00e4t integrieren. Der Code kann als Vorlage zum Kopieren, als Bibliothek oder als Ideenset f\u00fcr technische Umsetzungen verwendet werden.<\/p>\n<p>In Bezug auf die Funktionalit\u00e4t handelt es sich um ein gew\u00f6hnliches Affiliate-System, das die Registrierung mit Angabe des Referrers, multi-level Belohnungen f\u00fcr Empfehlungen und Anreize zur Registrierung im System (Cashback) umsetzt. Das System ist eine \u201ereine\u201c dApp, das hei\u00dft, die Webanwendung interagiert direkt mit der Blockchain, ohne einen eigenen Backend-Server oder eine Datenbank.<\/p>\n<p>Techniken werden verwendet, die auch in vielen anderen Projekten n\u00fctzlich sein k\u00f6nnen:<\/p>\n<ul>\n<li>Ein sofortiger Kreditabruf f\u00fcr ein Smart-Konto, ohne dass zu Beginn Token zur Bezahlung des Abrufs auf dem Konto vorhanden sind \u2013 diese werden w\u00e4hrend des Abrufs generiert.<\/li>\n<li>PoW-Captcha \u2013 ein Schutz gegen hochfrequente automatisierte Abrufe von Smart-Konto-Funktionen \u2013 \u00e4hnlich einer Captcha, aber basierend auf dem Nachweis der Nutzung von Rechenressourcen.<\/li>\n<li>Anfrage an die Schl\u00fcsseldaten nach Vorlage.<\/li>\n<\/ul>\n<p>\nDie Anwendung besteht aus:<\/p>\n<ul>\n<li>dem Smart-Kontocode in der Sprache ride4dapps (der konzipiert wurde, um in das Haupt-Smart-Konto integriert zu werden, f\u00fcr das die Affiliate-Funktionalit\u00e4t implementiert werden muss);<\/li>\n<li>einer js-H\u00fclle, die eine Abstraktionsschicht \u00fcber das WAVES NODE REST API bereitstellt;<\/li>\n<li>Code im vuejs-Framework, der ein Beispiel f\u00fcr die Verwendung der Bibliothek und des RIDE-Codes darstellt.<\/li>\n<\/ul>\n<p>\nWir beschreiben alle genannten Eigenschaften.<\/p>\n<p><b>Ein sofortiger Kreditabruf f\u00fcr ein Smart-Konto<\/b><\/p>\n<p>Der Aufruf von InvokeScript erfordert eine Geb\u00fchr vom kontoausl\u00f6senden Transaktionskonto. Das ist kein Problem, wenn Sie ein Projekt f\u00fcr Blockchain-Enthusiasten machen, die einige WAVES-Token auf ihrem Konto haben. Wenn das Produkt jedoch f\u00fcr die breite Masse gedacht ist, wird dies zu einem ernsthaften Problem. Der Nutzer muss sich um den Kauf von WAVES-Token (oder einem anderen passenden Asset, mit dem Transaktionen bezahlt werden k\u00f6nnen) k\u00fcmmern, was die ohnehin schon hohe Einstiegsh\u00fcrde f\u00fcr das Projekt erh\u00f6ht. Wir k\u00f6nnten den Nutzern ein Asset zur Verf\u00fcgung stellen, mit dem sie Transaktionen bezahlen k\u00f6nnen, und uns dem Risiko uneingemessener Verwendung aussetzen, wenn automatisierte Systeme eingerichtet werden, um liquide Assets aus unserem System abzuziehen.<\/p>\n<p>Es w\u00e4re sehr praktisch, wenn man den InvokeScript-Aufruf \"auf Kosten des Empf\u00e4ngers\" (des Smart-Accounts, auf dem das Skript installiert ist) durchf\u00fchren k\u00f6nnte, und eine solche M\u00f6glichkeit besteht, wenn auch nicht offensichtlich. <\/p>\n<p>Wenn innerhalb von InvokeScript ein ScriptTransfer an die aufrufende Adresse erfolgt, der die ausgegebenen Tokens f\u00fcr die Geb\u00fchr kompensiert, wird dieser Aufruf erfolgreich sein, selbst wenn zum Zeitpunkt des Aufrufs auf dem aufrufenden Konto keine Assets vorhanden sind. Dies ist m\u00f6glich, da die Pr\u00fcfung, ob gen\u00fcgend Tokens vorhanden sind, nach dem Transaktionsaufruf und nicht davor erfolgt, sodass Transaktionen auf Kredit durchgef\u00fchrt werden k\u00f6nnen, sofern sie sofort ausgeglichen werden.<\/p>\n<p><i>ScriptTransfer(i.caller, i.fee, unit)<\/i><\/p>\n<p>Der folgende Code erstattet die f\u00fcr die Geb\u00fchr ausgegebenen Mittel aus dem Smart-Account. Um einen Missbrauch dieser M\u00f6glichkeit zu verhindern, ist es notwendig zu \u00fcberpr\u00fcfen, dass der Aufrufer die Geb\u00fchr im richtigen Asset und in angemessenen Grenzen ausgibt:<\/p>\n<pre><code class=\"plaintext\">func checkFee(i:Invocation) = {\nif i.fee &gt; maxFee then throw(\"unvern\u00fcnftige hohe Geb\u00fchr\") else\nif i.feeAssetId != unit then throw(\"Die Geb\u00fchr muss in WAVES sein\") else true\n}<\/code><\/pre>\n<p>\nUm sich auch gegen b\u00f6swillige und sinnlose Mittelverschwendung abzusichern, ist ein Schutz vor automatischen Aufrufen erforderlich (PoW-Captcha)<\/p>\n<p><b>PoW-Captcha<\/b><\/p>\n<p>Die Grundidee der Proof-of-Work-Captcha ist nicht neu und wurde bereits in verschiedenen Projekten umgesetzt, darunter solche, die auf WAVES basieren. Der Gedanke dahinter ist, dass derjenige, der eine ressourcenverbrauchende Aktion durchf\u00fchren m\u00f6chte, auch eigene Ressourcen aufbringen muss, was Angriffe zur Ersch\u00f6pfung von Ressourcen kostspielig macht. F\u00fcr die einfache und kosteng\u00fcnstige Validierung, dass der Absender der Transaktion die PoW-Aufgabe gel\u00f6st hat, gibt es die \u00dcberpr\u00fcfung der Transaktions-ID:<\/p>\n<p><i>if take(toBase58String(i.transactionId), 3) != \u201c123\u201d then throw(\u201cproof of work failed\u201d) else<\/i><\/p>\n<p>Um eine Transaktion durchzuf\u00fchren, muss der Aufrufende Parameter w\u00e4hlen, sodass der Base58-Code (ID) mit den Ziffern 123 beginnt, was im Durchschnitt einige Dutzend Sekunden an Prozessorzeit entspricht und insgesamt f\u00fcr unsere Aufgabe sinnvoll ist. Wenn ein einfacherer oder schwierigerer PoW erforderlich ist, kann die Aufgabe auf offensichtliche Weise leicht angepasst werden.<\/p>\n<p><b>Anfrage an die Daten Schl\u00fcssel nach dem Muster<\/b><\/p>\n<p>Um die Blockchain als Datenbank nutzen zu k\u00f6nnen, ist es entscheidend, API-Tools f\u00fcr Anfragen an die Datenbank nach Schl\u00fcssel-Wert-Paaren gem\u00e4\u00df Mustern zu haben. Ein solches Toolset wurde Anfang Juli 2019 in Form eines Parameters eingef\u00fchrt <i>?matches<\/i> f\u00fcr die REST API-Anfrage <i>\/addresses\/data?matches=regexp<\/i>. Wenn wir aus der Webanwendung nicht einen Schl\u00fcssel und nicht alle Schl\u00fcssel gleichzeitig, sondern nur eine bestimmte Gruppe abrufen m\u00fcssen, k\u00f6nnen wir nach dem Schl\u00fcsselnamen filtern. Zum Beispiel werden in diesem Projekt die Auszahlungs Transaktionen in folgender Form kodiert<\/p>\n<pre><code class=\"plaintext\">withdraw_${userAddress}_${txid}<\/code><\/pre>\n<p>\n, was es erm\u00f6glicht, eine Liste von Auszahlungs Transaktionen f\u00fcr jede gegebene Adresse nach diesem Muster zu erhalten:<\/p>\n<pre><code class=\"plaintext\">?matches=withdraw_${userAddress}_.*<\/code><\/pre>\n<p>\nJetzt werden wir die Komponenten der fertigen L\u00f6sung analysieren.<\/p>\n<p><b>Code in vuejs<\/b><\/p>\n<p>Der Code ist eine funktionierende Demonstration, die einem realen Projekt nahekommt. Er implementiert den Zugang \u00fcber Waves Keeper und die Arbeit mit der Bibliothek affiliate.js, mithilfe derer er den Benutzer im System registriert, Transaktionsdaten abfragt und es erm\u00f6glicht, die verdienten Gelder auf das Benutzerkonto auszuzahlen.<\/p>\n<p><img decoding=\"async\" alt=\"Dezentrale Affiliate-Programm mit Open-Source-Code auf der Waves-Blockchain.\" src=\"\/wp-content\/uploads\/2019\/07\/4e8fe907255bea78ee4c2452f41f29b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Code in RIDE<\/b><\/p>\n<p>Besteht aus den Funktionen register, fund und withdraw.<\/p>\n<p>Die Funktion register registriert einen Benutzer im System. Sie hat zwei Parameter: referer (Adresse des Referrers) und einen in der Funktionslogik nicht verwendeten Parameter salt, der f\u00fcr die Bestimmung der Transaktions-ID ben\u00f6tigt wird (Aufgabe der PoW-Captcha).<\/p>\n<p>Die Funktion (wie auch die anderen Funktionen in diesem Projekt) verwendet eine Technik zur verz\u00f6gerten Ausf\u00fchrung. Das Ergebnis dieser Funktion ist die Finanzierung der Geb\u00fchrenzahlung f\u00fcr den Aufruf dieser Funktion. Mit dieser L\u00f6sung kann der Benutzer, der gerade eine Wallet erstellt hat, sofort mit dem System arbeiten, ohne sich Gedanken dar\u00fcber machen zu m\u00fcssen, wie er ein Asset erwerben oder erhalten kann, um die Transaktionsgeb\u00fchr zu bezahlen.<\/p>\n<p>Das Ergebnis der Registrierung besteht aus zwei Eintr\u00e4gen:<\/p>\n<pre><code class=\"plaintext\">${owner}_referer = referer\n${referer}_referral_${owner} = owner<\/code><\/pre>\n<p>\nDies erm\u00f6glicht sowohl direkte als auch umgekehrte Suchen (den Referrer dieses Nutzers und alle Referral-Links dieses Nutzers).<\/p>\n<p>Die Funktion fund dient eher als Vorlage zur Entwicklung des tats\u00e4chlichen Funktionsumfangs. In der vorliegenden Form nimmt sie alle durch die Transaktion \u00fcbertragenen Mittel und verteilt sie auf die Konten der Referrer der Stufen 1, 2 und 3, auf das \"Cashback\"-Konto und das \"Wechselgeld\"-Konto (hier gelangen alle Betr\u00e4ge hin, die nach der Verteilung auf die vorherigen Konten \u00fcbrig bleiben).<\/p>\n<p>Cashback ist ein Anreiz f\u00fcr Endbenutzer, an einem Empfehlungsprogramm teilzunehmen. Der ausgezahlte Teil der Provision, der als \u201eCashback\u201c bezeichnet wird, kann vom Benutzer in der gleichen Weise abgehoben werden wie die Belohnungen f\u00fcr Empfehlungen.<\/p>\n<p>Bei Verwendung des Empfehlungsprogramms sollte die Funktion fund angepasst und in die Hauptlogik des Smart Accounts integriert werden, in dem das System betrieben wird. Wenn beispielsweise die Empfehlungsentlohnung f\u00fcr eine platzierte Wette gezahlt wird, sollte die Funktion fund in die Logik integriert werden, wo die Wette platziert wird (oder eine andere zielgerichtete Handlung durchgef\u00fchrt wird, f\u00fcr die eine Entlohnung gezahlt wird). In dieser Funktion sind drei Ebenen der Empfehlungsbelohnungen kodiert. Falls mehr oder weniger Ebenen ben\u00f6tigt werden, kann dies ebenfalls im Code angepasst werden. Der Provisionsprozentsatz wird durch die Konstanten level1-level3 festgelegt, im Code wird er wie folgt berechnet: <i>amount * level \/ 1000<\/i>, was bedeutet, dass der Wert 1 0,1 % entspricht (dies kann ebenfalls im Code ge\u00e4ndert werden).<\/p>\n<p>Der Aufruf der Funktion \u00e4ndert das Guthaben des Kontos und erstellt auch Protokolle f\u00fcr Logging-Zwecke in folgendem Format:<\/p>\n<pre><code class=\"1c\">fund_address_txid = address:owner:inc:level:timestamp\nUm den Timestamp (aktuelle Zeit) zu erhalten, wird folgende Verbindung verwendet\nfunc getTimestamp() = {\nlet block = extract(blockInfoByHeight(height))\ntoString(block.timestamp)\n}<\/code><\/pre>\n<p>\nDas bedeutet, dass die Transaktionszeit\u200a\u2014\u200adie Zeit des Blocks ist, in dem sie sich befindet. Dies ist zuverl\u00e4ssiger, als den Timestamp aus der Transaktion selbst zu verwenden, zumal dieser nicht aus callable verf\u00fcgbar ist.<br \/>\nDie Funktion withdraw hebt alle angesammelten Belohnungen auf das Benutzerkonto ab. Sie erstellt Eintr\u00e4ge f\u00fcr Logging-Zwecke:<\/p>\n<pre><code class=\"plaintext\"># withdraw log: withdraw_user_txid=amount:timestamp<\/code><\/pre>\n<p>\n<b>generierten Wortliste wurde sichergestellt.<\/b><\/p>\n<p>Der Hauptteil der Anwendung\u200a\u2014\u200adie Bibliothek affiliate.js, die als Br\u00fccke zwischen den Datenmodellen affiliate und dem WAVES NODE REST API dient. Sie implementiert eine abstrahierte Ebene, die unabh\u00e4ngig vom Framework ist (kann mit jedem verwendet werden). Die aktiven Funktionen (register, withdraw) setzen voraus, dass Waves Keeper im System installiert ist, die Bibliothek \u00fcberpr\u00fcft dies jedoch nicht.<\/p>\n<p>Implementiert Methoden:<\/p>\n<pre><code class=\"plaintext\">fetchReferralTransactions\nfetchWithdrawTransactions\nfetchMyBalance\nfetchReferrals\nfetchReferer\nwithdraw\nregister<\/code><\/pre>\n<p>\nDie Funktionalit\u00e4t der Methoden ist aus den Namen ersichtlich, Parameter und R\u00fcckgabewerte sind im Code beschrieben. Die Funktion \u201eregister\u201c ben\u00f6tigt zus\u00e4tzliche Kommentare \u2013 sie startet einen Prozess zur Ermittlung der Transaktions-ID, die bei 123 beginnen soll \u2013 dies ist die oben beschriebene PoW-Captcha, die vor Massenregistrierungen sch\u00fctzt. Die Funktion findet die Transaktion mit der ben\u00f6tigten ID und signiert sie dann \u00fcber Waves Keeper.<\/p>\n<p>Das DEX-Partnerprogramm ist verf\u00fcgbar auf <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bettexproject\/WavesAffi\">GitHub.com<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/459590\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0430\u043d\u0442\u0430 Waves Labs \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Bettex. \u041f\u043e\u0441\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c! \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 dApp \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0430 \u0431\u043b\u0430\u0433\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0421\u0435\u0442\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 dApp \u0434\u043b\u044f affiliate-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 affiliate [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27007,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36114","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0430\u043d\u0442\u0430 Waves Labs \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Bettex. \u041f\u043e\u0441\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c! \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 dApp \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0430 \u0431\u043b\u0430\u0433\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0421\u0435\u0442\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 dApp \u0434\u043b\u044f affiliate-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 affiliate\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0430\u043d\u0442\u0430 Waves Labs \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Bettex. \u041f\u043e\u0441\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c! \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 dApp \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0430 \u0431\u043b\u0430\u0433\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0421\u0435\u0442\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 dApp \u0434\u043b\u044f affiliate-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 affiliate\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Dezentrales Partnerprogramm mit Open Source auf der Waves-Blockchain | ProHoster","description":"Das dezentrale Partnerprogramm auf der Waves-Blockchain wurde im Rahmen des Waves Labs Grants vom Bettex-Team umgesetzt. Dieser Beitrag ist keine Werbung! Das Programm ist Open Source und die Nutzung sowie Verbreitung sind kostenlos. Der Einsatz des Programms f\u00f6rdert die Entwicklung von dApp-Anwendungen und tr\u00e4gt allgemein zur Dezentralisierung bei, was jedem Nutzer des Netzwerks zugutekommt. Die vorgestellte dApp f\u00fcr Partnerprogramme dient als Vorlage f\u00fcr Projekte, die Partner-Programme integrieren.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves | ProHoster","og:description":"\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0430\u0444\u0444\u0438\u043b\u0435\u0439\u0442-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435 Waves, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0433\u0440\u0430\u043d\u0442\u0430 Waves Labs \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Bettex. \u041f\u043e\u0441\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u043c! \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e. \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 dApp \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u043d\u0430 \u0431\u043b\u0430\u0433\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0421\u0435\u0442\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 dApp \u0434\u043b\u044f affiliate-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445 affiliate","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/detsentralizovannaya-affilejt-programma-s-otkrytym-ishodnym-kodom-na-blokchejne-waves","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:42+00:00","article:modified_time":"2019-10-31T19:09:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36114","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:04:38","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:50:24","updated":"2026-01-22 02:04:38"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/36114","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=36114"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/36114\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/27007"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=36114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=36114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=36114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}