1

Тема: Шлях на криптовалютну вершину

сів я розбиратись з Ouroboros PoS і зрозумів що я трохи більше english дубовий table ніж думав

https://cardanodocs.com/cardano/proof-of-stake/

загалом чи правильно я зрозумів --
майнер в цьому алгоритмі називають лідером слота,
він вибирається між всіма у кого більше N монет на рахунку,
і вибирається цими ж вузлами

і ще ці вузли повинні були онлайн

чи не так?


і не зовсім зрозумів як там ці вибори за рахунок розрахунків багатьма частинами

зрозумів що кожен виборець генерує якесь рандомне значення, шифрує, підписує його, відправляю всім іншим виборцям + публічний ключ

далі всі виборці отримують від всіх виборців ці шифри, потім всі всі виборці всім виборцям скидають приватні ключі до цих шифрів ?

і це все пакується в блокчейн

якось так я зрозумів

потім кожен з виборців розшифровує ці повідомлення, складає з них одну строку,
і ця строка перетворюється в, умовно кажучи, айдішки вибраних майнерів

прошу мене поправити де я не так зрозумів, чи не догнав щось, чи криво переклав

https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////

2 Востаннє редагувалося Alchimic (17.02.2018 12:28:53)

Re: Шлях на криптовалютну вершину

чувак це доки.. їх розумієш за 3-5-м разом... повтори попитку. Попробуй транслейт.
насправдіж слоти сконструйовані для розпреділення майнінгу. Шифрування не має значення. Кожному слоту треба дати помайнити рівнозначно от і все.

(цей допис зроблено ботом. можете не звертати на нього уваги)
(цей підпис зроблено адміном. можете не звертати на нього уваги)

3

Re: Шлях на криптовалютну вершину

Alchimic написав:

чувак це доки.. їх розумієш за 3-5-м разом... повтори попитку. Попробуй транслейт.
насправдіж слоти сконструйовані для розпреділення майнінгу. Шифрування не має значення. Кожному слоту треба дати помайнити рівнозначно от і все.

шо за фігню ви написали?

[x|x<-[2..],all(>0)[x`mod`y|y<-[2..x-1]]]
Подякували: ostap34PHP, 221VOLT, leofun013

4

Re: Шлях на криптовалютну вершину

Спробував написати реалізацію Blockchain (POW) на пітоні проте ця фігня чогось не робе:

багато коду

#Blockchain
import hashlib, json, datetime

sha256=lambda x:hashlib.sha256(x.encode()).hexdigest()

class Transaction():
    def init(self, fromAddress, toAddress, amount):
        self.fromAddress = fromAddress
        self.toAddress = toAddress
        self.amount = amount

class Block():
    def __init__(self, timestamp, transactions, previousHash = ''):
        self.timestamp = timestamp
        self.transactions = transactions
        self.previousHash = previousHash
        self.hash = self.calculateHash()
        self.nonce = 0

    def calculateHash(self):
        return sha256(self.previousHash+str(self.timestamp)+json.JSONEncoder().encode(self.transactions)+str(self.nonce))

    def mineBlock(self,difficulty):
        while self.hash[:difficulty] != difficulty*"0":
            self.nonce+=1
            self.hash = self.calculateHash()

        print("BLOCK MINED: "+self.hash)

class Blockchain():
    def __init__(self):
        self.chain = [self.createGenesisBlock()]
        self.difficulty = 2
        self.pendingTransactions = []
        self.miningReward = 100 
    
    def createGenesisBlock(self):
        return Block(datetime.date(2018,1,1),[],"0")

    def getLatestBlock(self):
        return self.chain[-1]

    def minePendingTransactions(self,miningRewardAddress):
        block = Block(datetime.date.today(), self.pendingTransactions, self.getLatestBlock().hash)
        block.mineBlock(self.difficulty)

        print('Block successfully mined!')
        self.chain.append(block)

        self.pendingTransactions = [
            Transaction(None, miningRewardAddress, self.miningReward)
        ]

    def createTransaction(self,transaction):
        self.pendingTransactions.append(transaction)

    def getBalanceOfAddress(self,address):
        balance = 0
        for block in self.chain:
            for trans in block.transactions:
                if trans.fromAddress == address:
                    balance -= trans.amount
                if trans.toAddress == address:
                    balance += trans.amount
        return balance

    def isChainValid():
        for i in range(1,len(self.chain)):
            currentBlock = self.chain[i]
            previousBlock = self.chain[i-1]

            if currentBlock.hash != currentBlock.calculateHash():
                return False

            if currentBlock.previousHash != previousBlock.hash:
                return False
        return True

blockchain = Blockchain()
blockchain.createTransaction(Transaction('address1', 'address2', 100))
blockchain.createTransaction(Transaction('address2', 'address1', 50))

print("Starting the miner...")
blockchain.minePendingTransactions('miner-address')

print("Balance of miner is", blockchain.getBalanceOfAddress('miner-address'))
print("Balance of address1 is", blockchain.getBalanceOfAddress('address1'))
print("Balance of address2 is", blockchain.getBalanceOfAddress('address2'))

print("Starting the miner again...")
blockchain.minePendingTransactions('miner-address')

print("Balance of miner is", blockchain.getBalanceOfAddress('miner-address'))
print("Balance of address1 is", blockchain.getBalanceOfAddress('address1'))
print("Balance of address2 is", blockchain.getBalanceOfAddress('address2'))

Traceback (most recent call last):
  File "C:\Users\user\Desktop\blockchain.py", line 79, in <module>
    blockchain = Blockchain()
  File "C:\Users\user\Desktop\blockchain.py", line 32, in __init__
    self.chain = [self.createGenesisBlock()]
  File "C:\Users\user\Desktop\blockchain.py", line 38, in createGenesisBlock
    return Block(datetime.date(2018,1,1),[],"0")
  File "C:\Users\user\Desktop\blockchain.py", line 17, in __init__
    self.hash = self.calculateHash()
  File "C:\Users\user\Desktop\blockchain.py", line 21, in calculateHash
    return sha256(self.previousHash+str(self.timestamp)+json.JSONEncoder().encode(self.transactions)+str(self.nonce))
AttributeError: 'Block' object has no attribute 'nonce'

Чому виникає така помилка? Ніяк не можу зрозуміти.

[x|x<-[2..],all(>0)[x`mod`y|y<-[2..x-1]]]
Подякували: 221VOLT1

5

Re: Шлях на криптовалютну вершину

        self.hash = self.calculateHash()
        self.nonce = 0

поміняйте місцями. Ви викликаєте calculateHash до того, як створили nonce.

Подякували: /KIT\, 221VOLT2

6

Re: Шлях на криптовалютну вершину

Alchimic написав:

чувак це доки.. їх розумієш за 3-5-м разом... повтори попитку. Попробуй транслейт.
насправдіж слоти сконструйовані для розпреділення майнінгу. Шифрування не має значення. Кожному слоту треба дати помайнити рівнозначно от і все.

по-перше, не кожному, а тому хто має N+ монет
по друге, він має бути онлайн

і яку це шифрування не має значення?
майнить не слот а дрібніша частинка кожної монети

поправте, якщо помиляюсь

https://blog.clever-games.win/
Це ще не кінець. Це навіть не початок кінця. Але, можливо, це кінець початку.
Зростання мудрості можна точно вимірювати ступенем зменшення злоби.
///// у творчій відпустці. не турбувати /////