Zum Inhalt springen

skunk

Mitglied
  • Gesamte Inhalte

    6.608
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von skunk

  1. Alle genannten Punkte umgesetzt. Hier ist die finale Version: 'use strict'; const Web3 = require('web3'); const web3 = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546')); const fs = require('fs'); const async = require('async'); const BigNumber = require('bignumber.js'); BigNumber.config({ EXPONENTIAL_AT: 40 }) const erc20ABI = [{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] const Contract = '0x990f341946a3fdb507ae7e52d17851b87168017c'; const ERC20 = new web3.eth.Contract(erc20ABI, Contract); ERC20.getPastEvents('Transfer', { filter: {from: '0x4b5057b2c87ec9e7c047fb00c0e406dff2fdacad', to: '0xfbddadd80fe7bda00b901fbaf73803f2238ae655'}, fromBlock: 11380283, toBlock: 'latest' }, function(error, events) { if (error) { console.log(error); } else { console.log('Timestamp\tValue\tTxID'); async.eachLimit(events, 1, function(transaction, next) { web3.eth.getBlock(transaction.blockHash, function(error, block) { if (error) { console.log(error); } else { console.log('%s\t%s\t%s', new Date(block.timestamp*1000).toLocaleString('de-DE', {hour12: false}), BigNumber(transaction.returnValues.value).shiftedBy(-18), transaction.transactionHash); } next(); }); }); } }); Ausgabe:
  2. Hast du eigentlich eine Geth/Parity Node am Laufen oder soll ich meine Geth Node bereitstellen? Meine Geth Node ist noch am Snapshot erstellen sollte aber bereits Anfragen mit leicht reduzierter Performance beantworten können. Zum Warmwerden hier das erste nodejs Script was die Umbuchungen von der Einzahlungsadresse zur Auszahlungsadresse auflistet: 'use strict'; const Web3 = require('web3'); const web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545', {timeout: 3600000})); const fs = require('fs'); const async = require('async'); const BigNumber = require('bignumber.js'); BigNumber.config({ EXPONENTIAL_AT: 40 }) const erc20ABI = [{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}] const Contract = '0x990f341946a3fdb507ae7e52d17851b87168017c'; const ERC20 = new web3.eth.Contract(erc20ABI, Contract); ERC20.getPastEvents('Transfer', { filter: {from: '0x4b5057b2c87ec9e7c047fb00c0e406dff2fdacad', to: '0xfbddadd80fe7bda00b901fbaf73803f2238ae655'}, //fromBlock: 11380283, -> Zu Testzwecken übergangsweise einen kürzeren Zeitraum abfragen fromBlock: 13380283, toBlock: 'latest' }, function(error, events) { events.forEach(function(transaction){ console.log('hash: %s\tfrom: %s\tto: %s\tvalue: %s', transaction.transactionHash, transaction.returnValues.from, transaction.returnValues.to, BigNumber(transaction.returnValues.value).dividedBy('1000000000000000000')); }); }); Ein paar Sachen muss ich an dem Skript noch verbessern: 1. Zeitstempel mit ausgeben. 2. Mögliche Fehler mit ausgeben. Ich war jetzt faul und habe das dafür notwendige If einfach unterschlagen. Baue ich später noch mit ein. 3. Shift anstelle von Div bei der Ausgabe. 4. In der Finalen Version soll das Skript einen längeren Zeitraum abfragen. Für schnelle Testdurchläufe habe ich jetzt nur einen vergleichsweise aktuellen fromBlock gewählt. Was das Skript bereits sehr gut demonstriert: 5. Contract und ABI vom ERC20 Contract. Wenn wir einen der anderen beteiligten Contracts abfragen wollen müssen wir den Teil einfach nur austauschen. 6. BigNumber ist Pflicht und auch alle Rechenoperationen müssen über diese Bibliothek abgewickelt werden. Ohne BigNumber kann es zu Rechenfehler kommen. 7. Auflistung aller Transfer Events. Events sind einfach klasse. Der Smart Contract hat Tausende von Transaktionen durchlaufen aber wenn wir unsere Suche auf ein bestimmtes Event eingrenzen, ist die Abfrage deutlich schneller. 8. Optionaler Filter auf from und to Adresse. Edit: Das Skript braucht noch einen Namen sonst verlieren wir später den Überblick. Es werden ja durchaus mehrere Skripte werden und pro Skript interessiert und dann eigentlich immer nur die jeweils aktuellste Version. Irgendwelche Namensvorschläge?
  3. Wie kommt es, dass das vermeintliche Maximum gerade überschritten wurde? Edit: Der Contract hat eine Mint Funktion. Die Inflation kommt mir etwas groß vor. In wenigen Minuten wurden da doch einige neue Token erschaffen. Das könnte aber an der vergleichsweise geringen Anzahl liegen. Da fällt dann jeder neu geschaffene Token stärker ins Gewicht. Spielt das am Ende überhaupt eine Rolle oder wirkt sich die Inflation davon unbeeindruckt aus wir üblich? Davon unabhängig ist das hier lediglich ein "ERC-20" Contract auf einer anderen Blockchain. Mal ganz spaßig anzusehen aber viel mehr findet man auf deren Github Repository leider nicht. Den Smart Contract mit der Mint Funktion kann man hier einsehen: https://avascan.info/blockchain/c/address/0xb54f16fB19478766A268F172C9480f8da1a7c9C3 Das recht leere Github gibt es hier zu bewundern: https://github.com/Abracadabra-money
  4. Hast du dich schon mit damit befasst wie du das alles versteuern musst? Ich befürchte du hast die Steuerfalle bereits ausgelöst aber das ist vermutlich ein anderes Thema. Eine Alternative wäre noch Nuri. Ähnliche Redite auf BTC und bessere Rechtssicherheit weil deutsche Firma.
  5. Super Hinweis. Jetzt erschließt sich mir auch warum es vor ein paar Monaten und im Moment vergleichsweise viele Einzahlungen gibt. Ich hatte gar nicht daran gedacht, dass das an den zwei Bullenmarkt Perioden liegen könnte. Danke dir für den Denkanstoß.
  6. skunk

    Coronavirus

    Das wollte ich mit meiner Rückfrage nicht gleich andeuten. Ich wollte erstmal nur wissen in welchem Zusammenhang zum Beispiel Bildungslücken und Rentenlücken mit Corona stehen. Die Verbindung zwischen den genannten Begriffen und Corona erschließt sich mir nicht also frage ich lieber nach wie das gemeint war.
  7. Schreib ruhig mal deine Gedanken etwas ausführlicher auf. Ich verstehe noch nicht was genau du verlockend findest. Ich würde dann einfach mal ein paar Punkte ansprechen die dagegen sprechen. Mit der Zeit werden dann bestimmt noch ein paar andere in die Unterhaltung einsteigen. Bezüglich der Sicherheit geht eigentlich nichts über ein Hardware Wallet. Wir reden hier also erstmal von dem gleichen Risiko was du bei vielen anderen zentralisierten Dienstleistern auch hättest. Ob die Versicherung für eventuelle Verluste auch eintreten würde, lässt sich schwer sagen. Ich würde daher lieber meine Coins weiter auf meinem Hardware Wallet lagern.
  8. Die Kosten werden in dem Steuerjahr abgerechnet in dem sie Angefallen sind. Wenn du im Jahr 2020 eine Lizenz für das Steuerjahr 2019 kaufst, darfst du die Kosten in der 2019er Steuererklärung nicht angeben und musst ein Jahr warten bis es Zeit ist die Steuererklärung für 2020 einzureichen. In der Regel wirst du die Kosten also immer erst im nächsten Steuerjahr abrechnen können es sein denn du kaufst zum Black Friday / Cyber Monday 2021 bereits die Lizenz für das Steuerjahr 2021 im Voraus. Klar soweit? Was genau meinst du jetzt mit nachträglich? Hast du die Steuererklärung für das Vorjahr schon abgegeben und einen Steuerbescheid erhalten?
  9. skunk

    Coronavirus

    Ich bin mir nicht sicher ob wir dann wirklich keine Probleme mit Corona haben werden. Davon unabhängig was lässt dich jetzt die anderen Begriffe alle aufzählen? Willst du andeuten da ist eine Verschwörung am Werk und Corona dienst nur als Vorwand?
  10. stellar != stellarfund Soviel Zeit muss sein sonst besteht Verwechselungsgefahr. Ich bin zwar kein großer Fan von Stellar aber auf eine Stufe mit Stellarfund würde ich sie dann doch nicht stellen.
  11. Ich habe mir den Smart Contract durchgelesen und die Transaktionen auf der Blockchain verfolgt. Sehr gute Frage. Die Antwort darauf interessiert mich ebenfalls. Sobald meine Wartungsarbeiten an meiner Geth Node abgeschlossen sind, möchte ich ausrechnen ob und wie viel die Auszahlungsadresse schon im Minus ist. Dann kann ich dir eine grobe Schätzung geben. Die Schätzung selbst ist für mich eher Nebensächlich. Viel spannender finde ich die Frage welcher Dynamic das ganze Konstrukt unterliegt. Gibt es vielleicht einen Punkt an dem die Nodes in Panik verfallen und zügig ihre Rewards auszahlen wollen? Oder gewinnt am Ende die Gier und die meisten Nodes ignorieren das drohende Ende so lange wie möglich? Das können wir bei diesem Projekt hier alles Live über die Blockchain verfolgen.
  12. Kann mir jemand den Teil erklären? Ich habe mir das Volumen auf KuCoin und Uniswap angesehen. Ich sehe erstmal nichts verdächtiges. Oder geht es hier eher um die Börsen an sich und es wäre wünschenswert wenn der Token auf einer andere Börse handelbar wäre?
  13. Doppeldeutig. Die Anzahl der Nodes im Smart Contract dürfte stimmen. Es gibt nur keine echten Nodes, die dann in irgend einer Form einen Reward erwirtschaften würden.
  14. skunk

    Bundestagswahl 2021

    Beim Bitcoin Mining haben sie den halben Berg ausgehöhlt
  15. Der ProxyContract erlaubt es den Quellcode des Smart Contracts auszutauschen. Bei dem Link in meinem vorhergehenden Post siehst du auch auf welchen Smart Contract der ProxyContract vormals verlinkt hat. Ich habe mir den alten Contract nicht angeschaut. Im Quellcode des neuen Contract sehe ich aber etwas von legacy Nodes. In dem Kontext ist migrateNode zu verstehen. Davon unabhängig hast du natürlich völlig Recht. migrateNode zeigt mit wenigen Quellcode Zeilen recht eindrucksvoll die volle Schönheit dieser "Dienstleistung"
  16. Im Etherscan einmal auf readContract gehen. Da kannst du dann die derzeitigen Werte einsehen. Die 3 Admins sind dort mit dabei. Kleine Gemeinheit. ReadContract musst du eine Ebene höher ausführen. Dazwischen existiert ein ProxyContract. Das heißt Quellcode und die 3 Variablen sind an zwei unterschiedliche Contract geknüpft. Edit: Hier hast du https://etherscan.io/address/0xfbddadd80fe7bda00b901fbaf73803f2238ae655#readProxyContract
  17. Das gilt nur solange im ERC-20 Contract das steht was wir alle mehr oder weniger blind annehmen. Auch ein ERC-20 Contract ist immer noch ein vollwertiger Smart Contract mit dem kompletten Spektrum an Möglichkeiten. Da kann erstmal alles erlaubt sein. Ich bin mir zu 90% sicher, dass der STRONG Token keine Mint Funktion hat. Es gibt zwar eine interne Mint Funktion aber die kann nur ein einziges mal bei der Erstellung des Token aufgerufen werden. Es gibt Möglichkeiten das zu umgehen. Daher die restlichen 10%. Ich gehe davon aus, dass das Projekt sowieso beendet wird sobald die Auszahlungsadresse leer ist. So ein toten Gaul muss man nicht endlos lange reiten. Einfach einmal umsatteln und mit neuen Namen das Spiel wiederholen. Das erscheint mir lukrativer. Ich muss am Montag auch mal meine Kollegin fragen wie das in 2018 war. Ich erinnere mich dunkel, dass es so ein ähnlichen Smart Contract schon einmal gab. Vielleicht erinnert sie sich noch an den Namen des alten Projekts.
  18. Kein Thema. Ich kann dir meine Skripte später zur Verfügung stellen. Es könnte ein paar Tage dauern. Meine Geth Node braucht erst noch etwas Liebe. Beides. Es gibt einmal eine automatische Überwachung aber der Admin hat zusätzlich ebenfalls nochmal ein paar Funktionen um Nodes zu deaktivieren oder auch um sie zu aktivieren. Eine dritte Node kann diese Funktionen nicht ausführen. Zumindest habe ich beim durchstöbern keinen offensichtlichen Fehler gesehen. Die automatische Überwachung läuft über: function payFee(uint128 nodeId) public payable { address sender = msg.sender == address(this) ? tx.origin : msg.sender; bytes memory id = getNodeId(sender, nodeId); if (hasLegacyNode(sender)) { migrateLegacyNode(sender); } require(doesNodeExist(sender, nodeId), "doesnt exist"); require(hasNodeExpired(sender, nodeId) == false, "too late"); require(hasMaxPayments(sender, nodeId) == false, "too soon"); if (entityNodeIsBYON[id]) { require(msg.value == recurringFeeInWei, "invalid fee"); } else { require(msg.value == recurringNaaSFeeInWei, "invalid fee"); } feeCollector.transfer(msg.value); entityNodePaidOnBlock[id] = entityNodePaidOnBlock[id].add(recurringPaymentCycleInBlocks); emit Paid(sender, nodeId, entityNodeIsBYON[id], true, entityNodePaidOnBlock[id]); } Die Überwachung selber kostet also keine ETH sondern läuft elegant nebenher mit. Auch hier wird ClaimAll einfach kurz prüfen ob die Node bereits expired ist und dann einfach nicht auszahlen.
  19. https://etherscan.io/address/0xfbddadd80fe7bda00b901fbaf73803f2238ae655 Problem ist, dass du die Summe der Rewards erstmal nicht siehst. Das ganze ist vergleichbar mit einer Kreditkarte. Das Bankkonto ist leicht positiv aber auf der Kreditkarte sind noch ausstehende Forderungen. Die ausstehenden Forderungen werden dir bei diesem Smart Contract nicht anzeigt. Um zu berechnen ob und wie viel der Smart Contract im Minus ist, muss man die ausstehenden Rewards aller Nodes aufsummieren. Genau diese Summe will ich die Tage mal von einer Geth Node erfragen.
  20. Der Smart Contract ist hier: https://etherscan.io/address/0x4798bb87846c2d51953c406a430b9f3a70688ddd#code Die spannende Funktion ist ClaimAll. Da steckt die ganze Logik drin. Wenn eine Node 3 Monate mit der Auszahlung wartet, muss sie mehrfach ETH Gebühren vorstrecken obwohl nur der ClaimAll Aufruf am Ende nennenswerte Kosten verursacht. Die zu viel gezahlten ETH landen hier: https://etherscan.io/address/0x4b5057b2c87ec9e7c047fb00c0e406dff2fdacad#analytics Gut zu erkennen ist das Sägezahn Muster. Die ETH werden hier umgebucht: https://etherscan.io/tx/0x120b46deac0a68aa9b194438cf3ada90983c517b798543c9cc19dd6e1775e420 und anschließend hier auf Uniswap verkauft: https://etherscan.io/tx/0x44f553ec72fc12dd7ff2e6f3310d60c6437445ed9bedf0879d7505a6f2a953cf Die Transaktion in Richtung Uniswap beinhaltet neben den ETH Gebühren der Nodes auch die ETH vom NFT Smart Contract.
  21. Was würdest du als Beleg anerkennen? Steht alles im Smart Contract. Ich kann dir gern zeigen welche Funktionen daran vor allem beteiligt sind. Alternativ können wir uns auch die Adresse anschauen auf der das ganze ETH gesammelt wird und wofür es am Ende zweckentfremdet wird.
  22. Die überschüssigen ETH steckt sich der Admin in die eigene Tasche. Davon werden keine Miner bezahlt.
  23. Ließ dir den Smart Contract durch. Der Reward für die Nodes ist entkoppelt von dem Guthaben der Auszahlungsadresse. Der Admin hat sogar eine Withdraw Funktion eingebaut und kann damit die Auszahlungsadresse jederzeit leer räumen. Die Nodes bekommen dann im Frontend einen Reward angezeigt können diesen aber nicht mehr auszahlen. Es würde mich nicht wundern wenn die Summe aller Rewards schon jetzt höher ist als das verfügbare Guthaben auf der Auszahlungsadresse.
  24. Ganz einfach. Ich sage dir, dass deine Node jederzeit 100 Coins auszahlen darf. Das gleiche sage ich 1000 anderen Nodes. In Summe können jederzeit 100K ausgezahlt werden. Wenn die Adresse jetzt nur 10K hat dann ist sie 90K im Minus. Alle 1000 Nodes können den Smart Contract fragen und bekommen die gleiche Auskunft. Sie können ihre 100 Coins jederzeit auszahlen. Allerdings nur solange wie noch echtes Guthaben da ist. Es gibt einen Unterschied zwischen dem theoretischen Reward und der praktischen Abbuchung dieser Rewards. In diesem einfachen Beispiel können dann 10% ihre Rewards noch abheben und 90% gehen am Ende leer aus. Bei diesem Smart Contract nicht. Die Nodes werden gezwungen immer wieder frisches ETH einzuzahlen sonst wird ihre Node deaktiviert und sie bekommen den Reward nicht. Die Summe an eingezahlten ETH ist deutlich größer als das was der Smart Contract selber verbraucht. Wie viel ETH die Nodes einzahlen müssen, wird nicht vom Ethereum Netzwerk sondern vom Smart Contract Admin festgelegt. Er könnte die Gebühren reduzieren wenn er wollte. Quizfrage: Wie viele Nodes bemerken, dass die Gebühren zu hoch sind? Wie viele Nodes sind in der Lage den Smart Contract halbwegs zu verstehen? Ich würde behaupten die Zahl derer, die das vorrechnen könnten, ist verschwindend gering. Man kann denen dann immer noch an den Kopf werfen, dass sie nur FUD verbreiten, sich besser informieren müssen und aussagekräftige Beweise vorlegen müssen. Das funktioniert in der Regel wunderbar. Solange eine überwältigende Mehrheit glaubt, dass die Gebühren gerechtfertigt sind, werden die Nodes fleißig weiter zahlen.
  25. Ich habe mir den Smart Contract nochmal etwas genauer angesehen. Der hat netterweise ein paar sehr schöne Funktionen. Es gibt eine vorlaufende Nummer für jede Node genannt nodeID. Zu jeder nodeID kann man auch die Adresse abfragen. Mit diesen beiden Angaben kann man sich dann den Reward geben lassen. -> Ich kann berechnen ob und wie viel die Auszahlungsadresse im Minus ist. Je kleiner der Fehlbetrag ist um so länger kann das System noch weiter laufen. Ich kann auch mal zum Spaß das Guthaben der Auszahlungsadresse über die Zeit in einen Graphen zeichnen. Mal sehen was da so schönes bei raus kommt. Ich hoffe darüber erkennen zu können wie groß dieser Schneeball maximal geworden ist oder vielleicht ist er sogar noch am wachsen. Ist es vielleicht sogar möglich Vorhersagen zu treffen? Das könnte interessant werden. Es gibt ein Claimed Event. -> Ich kann berechnen wie viele Nodes schon mit Gewinn raus gegangen sind. Ich sollte sogar berechnen können wie viele Nodes den Reward nicht umgewandelt sondern reinvestiert haben. Habe ich irgendwas spannendes vergessen? PS: Mein Verdacht bezüglich der ETH Gebühren erhärtet sich. Effektiv verbraucht der Smart Contract nur geringe Mengen an ETH. Eine Node kann eigentlich Monate lang einfach Guthaben ansparen ohne irgendwelche Kosten zu verursachen. Erst wenn die Node auszahlen möchte, fängt die eigentliche Berechnung an. Es gibt natürlich noch ein wenig administrativen Overhead aber der ist weit kleiner als die Menge an ETH, die die Nodes einzahlen müssen um aktiv zu bleiben.
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.