商意经

 找回密码
 立即注册
查看: 108|回复: 5

c站,地球上第一家 web3 弹幕网站

[复制链接]

1544

主题

3862

帖子

6960

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6960
发表于 2022-11-30 18:15:06 | 显示全部楼层 |阅读模式
halo 大家好,俺是 132,今天给大家带来一篇重磅的文章,也就是关于 c 站终于完成了 web3 的重构,这件事
背景

c站成立于 2018 年,是一家弹幕视频网站,彼时拥有几十万注册用户,月活 100W+,热度一度赶超 a 站
但是好景不长,c 站最大的诟病就是和 b 站太像了,一个 clicli 一个 bilibili,同质化严重,憋屈死了
为了解决和 b 站同质化的问题,c 站提出了 meta 计划,也就是玩法逐渐 meta 化,将越来越多的功能迁移到 web3,也就是上链
至此,问,c 站和 b 站最大的不同是什么?答:c 站是 web3,b 站是 web2
开搞

第一步,从合约开始:
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract MyERC20 {
    string public name = "CliCli";
    string public symbol = "CCB";
    uint8 public decimals = 6;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;

    constructor(uint256 total) {
        totalSupply = total;
        balanceOf[msg.sender] = total;
    }

    function transfer(
        address from,
        address to,
        uint256 amount
    ) public returns (bool) {
        balanceOf[from] -= amount;
        balanceOf[to] += amount;
        return true;
    }
}一个简单的 solidity 合约长这样,如果你代码比较敏感的话,到这里其实已经可以感知到区块链本质是啥了
从代码上感知,它其实只是一个内存数据库,当然它本质上是一个分布式的数据库
第二步,go 调用合约:
这一步也是折腾最久的,因为 go-ethereum 这个包,文档实在是令人绝望
func CallContractWithAbi(client *ethclient.Client, privKey *ecdsa.PrivateKey, from, to common.Address, contract string) (string, error) {
        // create tx
        nonce, err := client.NonceAt(context.Background(), from, nil)
        if err != nil {
                fmt.Println("get nonce: ", err)
                return "", err
        }
        gasPrice, err := client.SuggestGasPrice(context.Background())
        if err != nil {
                fmt.Println("gas price: ", err)
                return "", err
        }
        if err != nil {
                fmt.Println("read file: ", err)
                return "", err
        }
        contractABI, err := abi.JSON(bytes.NewReader(abiData))
        if err != nil {
                fmt.Println("abi json: ", err)
                return "", err
        }
        amount, _ := new(big.Int).SetString("1000000", 10) //1
        callData, err := contractABI.Pack("transfer", from, to, amount)
        if err != nil {
                fmt.Println("abi pack: ", err)
                return "", err
        }
        tx := types.NewTransaction(nonce, common.HexToAddress(contract), big.NewInt(0), uint64(300000), gasPrice, callData)
        // sign tx
        signedTx, err := types.SignTx(tx, types.NewEIP155Signer(big.NewInt(5)), privKey)
        if err != nil {
                fmt.Println("sign tx: ", err)
                return "", err
        }
        // send tx
        err = client.SendTransaction(context.Background(), signedTx)
        if err != nil {
                fmt.Println("send tx: ", err)
                return "", err
        }
        return signedTx.Hash().Hex(), nil
}
值得一提的是,废了很大的力气,终于找到了一种不使用 `abigen.exe` 的合约调用方法
我真的是麻了
第三步,部署:
因为 go-etnereum 这个包需要 gcc,在 window 上可以用 minGW 或者 MSVC,附上一个 minGW 的下载地址
点我
至于 linux 上交叉编译,具体看 github action 即可
玩法
目前 c 站的 web3 的功能只有投币这一个,通俗理解,就是你投搞,我给你投币
然后因为区块链本质上是个数据库,所以除了数字货币,理论上还有很多东西可以上链
接下来 c 站会有很多 web3 的玩法,比如弹幕上链,萌战,等等,只要是新功能,基本上都是为上链做设计
最后
重要的事情说三遍:
b 站是 web2,c 站是 web3
b 站是 web2,c 站是 web3
b 站是 web2,c 站是 web3
最后附上 c 站代码仓库,大家有啥想法欢迎一起交流
GitHub - cliclitv/go-clicli: CliCli project
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-11-30 18:15:45 | 显示全部楼层
可以给用户发创世nft[捂嘴]
回复

使用道具 举报

1544

主题

3862

帖子

6960

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6960
 楼主| 发表于 2022-11-30 18:16:21 | 显示全部楼层
不上公链的nft没有意义的
回复

使用道具 举报

1544

主题

3862

帖子

6960

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6960
 楼主| 发表于 2022-11-30 18:16:39 | 显示全部楼层
是这个站吗?clicli.cc?  这做的也太简陋了
回复

使用道具 举报

1544

主题

3862

帖子

6960

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6960
 楼主| 发表于 2022-11-30 18:16:55 | 显示全部楼层
发虚假nft,归中心化网站所有,可以让用户提出去链上自己的钱包,提的时候mint
回复

使用道具 举报

0

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 6 天前 | 显示全部楼层
传说中的沙发???哇卡卡
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|商意经

GMT+8, 2025-4-6 10:34 , Processed in 0.098318 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表