?!区区!?-计算

?!区区!?-计算

周二 6月 09 2026
1436 字 · 7 分钟

区块链收益分配

PPLNS (Pay per last N shares)

所有的矿工一旦发现了一个区块,矿池先扣掉手续费,然后将剩下全部收益(包括区块链奖励和矿工费)按照算力占比分配给各个矿工。

假设一位矿工占矿池总算力的10%,矿池收取4%的手续费。当天矿池的实际收益=50 BTC的区块奖励 + 1 BTC的矿工费。该矿工可获得的收益为:

(50+1)×(100%4%)×10%=4.896 BTC(50 + 1) \times (100\% - 4\%) \times 10\% = 4.896\ \text{BTC}

PPS (Pay per share)

根据矿工算力在矿池中的占比,估算在矿池每天可以获得的产出(理论收益)。 在扣除矿池手续费后,给矿工每天基本固定的收益。

假设一位矿工占矿池总算力的10%,矿池收取4%的手续费。当天矿池的理论收益是50 BTC。 那么他会得到:

50×(100%4%)×10%=4.8 BTC50 \times (100\% - 4\%) \times 10\% = 4.8 \ \text{BTC}

PPS+(Pay per share Plus)

是PPS和PPLNS两种模式的结合,即对出块的奖励按照矿池理论出块数量进行PPS结算,而对矿工费则按照矿池实际爆块获得的矿工费按照实际算力所占比例分配

假设一位矿工占矿池总算力的10%,矿池收取区块奖励4%的PPS手续费,和矿工费1%的PPLNS手续费。当天矿池的理论收益是50 BTC,实际矿工费收益是1 BTC。那么他会得到多少BTC?

50×(100%4%)×10%+1×(100%1%)×10%=4.899 BTC50 \times (100\% - 4\%) \times 10\% + 1 \times (100\% - 1\%) \times 10\% = 4.899 \text{ BTC}

例题

矿工算力占比
A10%
B30%
C40%
D20%

矿池收取区块奖励 5% 的 PPS 手续费,和矿工费 1% 的 PPLNS 手续费。

当天矿池的理论收益是 50 BTC,实际收益是 100 BTC,矿工费收益按实际收益的 2% 收取。试计算在 PPS+ 分配模式下 A、B、C、D 和矿池的收益。


上文所述,矿工费按实际的分配,所以根据实际的收益可以算出矿工费:

矿工费:100×2%=2BTC\text{矿工费:}100\times2\%=2\,\text{BTC}

之后根据公式即可求解矿工的收益:

A:50×(100%5%)×10%+2×(100%1%)×10%=4.948BTCB:50×(100%5%)×30%+2×(100%1%)×30%=14.844BTCC:50×(100%5%)×40%+2×(100%1%)×40%=19.792BTCD:50×(100%5%)×20%+2×(100%1%)×20%=9.896BTC\begin{align*} \text{A:}&\quad 50\times(100\%-5\%)\times10\%+2\times(100\%-1\%)\times10\%=4.948\,\text{BTC} \\[6pt] \text{B:}&\quad 50\times(100\%-5\%)\times30\%+2\times(100\%-1\%)\times30\%=14.844\,\text{BTC} \\[6pt] \text{C:}&\quad 50\times(100\%-5\%)\times40\%+2\times(100\%-1\%)\times40\%=19.792\,\text{BTC} \\[6pt] \text{D:}&\quad 50\times(100\%-5\%)\times20\%+2\times(100\%-1\%)\times20\%=9.896\,\text{BTC} \\[6pt] \end{align*}

矿池收益即为实际收益剩下的收益:

矿池:1004.94814.84419.7929.896=50.52BTC\text{矿池:}100 - 4.948 - 14.844 - 19.792 - 9.896 = 50.52\,\text{BTC}

RSA算法

步骤说明描述
1选择一对不相等且足够大的素数p, qp,\ q
2计算p,q的乘积n=pqn=pq
3计算n的欧拉函数ϕ(n)=(p1)(q1)\phi(n)=(p-1)(q-1)
4选一个与ϕ(n)\phi(n)互质的整数e1<e<ϕ(n)1<e<\phi(n)
5计算出e对于ϕ(n)\phi(n)的模反元素ddemodϕ(n)=1de \bmod \phi(n)=1
6公钥KU=(e,n)KU=(e,n)
7私钥KR=(d,n)KR=(d,n)

例题

已知 2 个素数分别为 59 和 97,取整数 e=173e=173,求解 RSA 算法生成的公钥和私钥。

求解就按上述的步骤来

选择一对不相等且足够大的素数

在这里 p=59p = 59 , q=97q = 97

计算p,q的乘积

n=pq=5723n = pq = 5723

计算n的欧拉函数

欧拉函数是欧拉定理的核心概念,其表述为:对于一个正整数nn,比nn小但与nn互为素数的正整数的个数,称为欧拉函数,用ϕ(n)\phi(n)表示。

其中有一个定理:若nn是两个素数ppqq的乘积,则ϕ(n)=ϕ(p)×ϕ(q)=(p1)(q1)\phi(n)=\phi(p)\times\phi(q)=(p-1)(q-1)

所以,在这里:

ϕ(n)=(p1)(q1)=5568\phi(n) =(p-1)(q-1)= 5568

选一个与ϕ(n)\phi(n)互质的整数e

题目已经给出整数:e=173e=173

计算出e对于ϕ(n)\phi(n)的模反元素d

辗转相除法(GCD)

最常用的求 GCD 算法是欧几里得算法,核心思想是:

gcd(a, b) = gcd(b, a % b),直到 b == 0,此时 a 就是最大公约数。

算法的正确性基于一个数学定理:ab 的公约数,同时也是 ba % b 的公约数

举个例子,计算 gcd(48, 18)

JAVA
gcd(48, 18)
= gcd(18, 48 % 18)
= gcd(18, 12)
= gcd(12, 18 % 12)
= gcd(12, 6)
= gcd(6, 12 % 6)
= gcd(6, 0)
= 6

在这里先利用辗转相除法来求5568和173的最大公约数:

5568=173×32+32173=32×5+1332=13×2+613=6×2+16=1×6+0\begin{align*} 5568 = 173 \times 32 + 32\\ 173 = 32 \times 5 + 13\\ 32 = 13 \times 2 + 6 \\ 13 = 6 \times 2 + 1 \\ 6 = 1 \times 6 + 0 \end{align*}

之后把结果用矩阵表示:

(ab)=i=0N(qi110)(rN10)\begin{pmatrix} a \\ b \end{pmatrix} = \prod_{i=0}^{N} \begin{pmatrix} q_i & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} r_{N-1} \\ 0 \end{pmatrix}

其中:

  • qiq_i表示每次的商
  • r表示余数,rN1r_{N−1}​:是倒数第二步的余数
  • a,ba, b: 初始的两个正整数 (ab)(a \ge b)
(5568173)=(32110)(5110)(2110)(2110)(6110)(10)\begin{pmatrix} 5568 \\ 173 \end{pmatrix} = \begin{pmatrix} 32 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 5 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 6 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \end{pmatrix}

把右侧除了最后一项,其余先算出来

M=(32110)(5110)(2110)(2110)(6110)=(556886917327)M = \begin{pmatrix} 32 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 5 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 0 \end{pmatrix} \begin{pmatrix} 6 & 1 \\ 1 & 0 \end{pmatrix} = \begin{pmatrix} 5568 & 869 \\ 173 & 27 \end{pmatrix}

此时,模反元素 d 即为右上角元素:869。

公钥与私钥

写出公钥和私钥

KV(173,5723)KV(173, 5723) KR(869,5723)KR(869, 5723)

Kademlia算法

例题

在 Kademlia 算法中,路由表按照异或距离对节点进行分层。以 00001010 为基础节点,试画出 k-bucket 4 的二叉树结构图,并写出每个叶节点的 NodeID。

k-bucket i

假设基础节点有 n 位

那么k-bucket i 代表与基础节点的倒数第 i 位取反,高位 n-i位不变,余下的 i-1 位可以取任何值。

比如: 在这里 00001010 为基础节点,倒数第四位取反为 00000010,余下的位数为 010,即 i 后面的位数。

所以可以取 00000 00000000 00100000 01000000 01100000 10000000 10100000 11000000 111(此处后三位分开是为了看的更清楚,考试请合并)。

之后按照 左0右1来构造二叉树,类似于:

image


Thanks for reading!

?!区区!?-计算

周二 6月 09 2026
1436 字 · 7 分钟

Comments

cover

青山绿野

渡边 雅二