过去常听别人讲区块链,但大多是停留在炒币的层面,过年假期简单尝试了一下 DApp 开发,不禁在想,区块链究竟能给我们带来什么?应用场景是什么,以及怎么做合适,这些问题,币圈依然在探索,但我们这里先从几个简单的例子切入,从应用层去做一点大胆的尝试。
众所周知,基础在每一个应用/业务系统中,我们都必须实现一套用户体系,我们需要的到底是什么?这里就不故弄玄虚了,给出我的理解:
identity
role/permission
后续的业务流程,几乎都是在此之上的拓展。
一个基础的概念是,钱包的地址是唯一的,其次,区块链钱包的所有权在哪里?——是私钥的所有者。
这对应到用户体系是不就是账号密码吗?我们建立的用户体系,如果服务器被攻击,甚至可能导致社工库攻击,导致用户其他站点的资源受损,但如果换成钱包的地址呢,私钥在用户手中,我们又能得到唯一的地址对应到用户的 identity,显而易见,我们不再需要建立一张 用户表 了!
有了用户,还需要什么?—— 角色权限表。
EIP-1155: Multi Token Standard
这里我们就看到 NFT 的应用场景了,这个概念对很多人还是很模糊,我们拿 ERC1155 的 NFT 标准一看,就会发现有趣的事情,可以用来做权限角色啊!

我通过 ERC1155 在 BSC TEST NETWORK 部署了一份智能合约,其中设定了四种角色如下:
export const COLLECTION_ENUM = {
PLATINUM: 0,
GOLD: 1,
SILVER: 2,
COPPER: 3,
};
并且合约的构造函数中,设定好了数量(当然,数量可变)如下:
contract SPSR is
Initializable,
ERC1155Upgradeable
{
function initialize() public initializer {
__ERC1155_init('');
_mint(msg.sender, 0, 10**2, '');
_mint(msg.sender, 1, 10**4, '');
_mint(msg.sender, 2, 10**6, '');
_mint(msg.sender, 3, 10**8, '');
}
}
怎么做?—— 拥有对应的 NFT 则表示该地址有对应的 角色/权限!
EIP-4361: Sign-In with Ethereum.
Standardizes off-chain authentication for Ethereum accounts to establish sessions.
参考该 EIP 以及对应的工具库如 SIWE 可以看到,我们能够使用钱包(off-chain)实现为 ETH 账户建立 Session,由此实现登录的能力。

鉴权能力可通过后端查询(RPC调用)该账户持有的 NFT 实现。
基于上述两种场景,我们可以实现认证鉴权,那么又一个问题来了,拓展场景是什么呢?
举例来说,CNode.js / CNPM 都需要用户体系和角色,但是部署两份合约显然是需要消耗 GAS 的,那我们就可以使用同一份智能合约,在不同站点公用,通过后端查询对应的区块链网络,比如我定义的 SPSR ERC1155 的 NFT,在 CNode.js / CNPM 去 BSC 查询用户持有的 NFT 来判断角色,进而实现对应的业务逻辑。
再者,我们也可以发行对应的 TOKEN,基于 ERC20 合约,建立代币,激励社区,减少类似 COLORJS 的悲剧。
EIP-20: Token Standard
代币可用于:
兑换 存储空间等
兑换 T恤 等纪念品
未完待续。

