首页 > 其他分享 >基于区块链的数字身份应用开发(中)

基于区块链的数字身份应用开发(中)

时间:2024-08-19 14:28:12浏览次数:14  
标签:基于 return nil err -- go 区块 身份 sdk

基于区块链的数字身份应用开发(中)

任务二:项目构建

(1)通过智能合约文件生成Go文件

桌面新建web文件夹,并在web中新建contract文件夹并进入到contract文件夹

mkdir web
cd web
mkdir contract
cd contract

在这里插入图片描述

将导出的合约文件移动到当前contract文件夹下并解压

mv /root/Downloads/contracts.zip ./
unzip contracts.zip

在这里插入图片描述

使用wget命令下载solc程序

wget http://res.zhonghui.vip/blockchain/DID/resource/solc

为 solc 二进制程序添加执行权限

chmod +x solc

重新编译DIDHub 合约和 WorkClaim 合约

./solc --bin --abi ./DIDHub.sol ./WorkClaim.sol --overwrite -o ./

下载 Go SDK

wget http://res.zhonghui.vip/blockchain/DID/resource/go-sdk.zip

解压 go-sdk 压缩包

unzip go-sdk.zip

使用cd命令进入go-sdk-0.11.0文件夹并同步依赖

cd go-sdk-0.11.0
go mod tidy

在这里插入图片描述

编译 abigen 工具

go build ./cmd/abigen

返回上级文件夹,将abigen移动到当前目录下

cd ..
mv go-sdk-0.11.0/abigen ./

使用abigen程序生成DID.go、DIDHub.go、WorkClaim.go文件,–abi指定abi文件,- -bin指定bin文件,–pkg指定生成的go代码package,–out指定生成的代码文件

./abigen --bin ./DID.bin --abi ./DID.abi --pkg DID --out ./DID.go

./abigen --bin ./DIDHub.bin --abi ./DIDHub.abi --pkg DIDHub --out ./DIDHub.go

./abigen --bin ./WorkClaim.bin --abi ./WorkClaim.abi --pkg
WorkClaim --out ./WorkClaim.go

在这里插入图片描述

(2)创建beego项目

返回上级文件夹,安装bee工具

cd ../

go install github.com/beego/bee/v2@develop

构建 DIDApplication 程序项目

bee new DIDApplication

在这里插入图片描述

进入到项目目录,并同步项目依赖

cd DIDApplication
go mod tidy

在这里插入图片描述

输入如下命令,启动程序项目

bee run

浏览器访问localhost:8080,若出现下图标识即为运行成功

在这里插入图片描述

测试成功后,切换到终端界面,同时按下“ctrl”“c”键停止服务

(3)前端工程准备

使用vscode打开/Desktop/web/DIDApplication项目

在这里插入图片描述

下载静态文件 切换到终端窗口,使用“cd”命令进入到static/img文件夹下

使用“wget”命令下载图片资源

wget http://res.zhonghui.vip/blockchain/DID/img/img.zip

在这里插入图片描述

使用“unzip”命令解压缩图片资源文件,解压之后删除img.zip压缩包

unzip img.zip
rm img.zip

使用“wget”命令下载样式文件

wget http://res.zhonghui.vip/blockchain/DID/css/index.css

在这里插入图片描述

使用“cd”命令进入views文件夹,删除其中的index.tpl文件

cd ../../views
rm index.tpl

使用“wget”命令下载模板资源

wget http://res.zhonghui.vip/blockchain/DID/resource/template.zip

在这里插入图片描述

使用“unzip”命令解压缩模板资源文件,解压后删除template.zip压缩包

unzip template.zip
rm template.zip

在这里插入图片描述

(4)引入go合约文件

在DIDApplication中新建contracts文件夹,并在其中新建DID、DIDHub、WorkClaim 文件夹

在这里插入图片描述

在终端输入如下命令,将生成的 go 合约文件移动到对应的文件夹下

mv ../contract/DID.go contracts/DID

mv ../contract/DIDHub.go contracts/DIDHub

mv ../contract/WorkClaim.go contracts/WorkClaim

使用 ”go get“ 命令引入 ”go-sdk“ 依赖,并同步依赖

go get github.com/FISCO-BCOS/[email protected]
go mod tidy

在这里插入图片描述

(5)配置 GO SDK

使用cp命令复制sdk配置文件

cp -r /root/Desktop/nodes/127.0.0.1/sdk conf/

进入到conf目录下,下载get_account.sh工具

cd conf
wget http://res.zhonghui.vip/blockchain-5/tools/get_account.sh

在这里插入图片描述

调用get_account.sh工具,创建新用户

bash get_account.sh

在这里插入图片描述

注:每次生成的地址和密钥都是随机的 在 conf 目录下创建 “config.toml” 文件

[Network]
Type="channel" # 使用channel类型与区块链交互
CAFile="./conf/sdk/ca.crt" # ca文件路径
Cert="./conf/sdk/sdk.crt" # cert文件路径
Key="./conf/sdk/sdk.key" # key文件路径
[[Network.Connection]]
NodeURL="127.0.0.1:20200" # channel运行端口
GroupID=1 # 分组id
[Account]
# sdk操作账户密钥路径 注意:实验时此处应填写上文使用get_account.sh工具生成的
账户密钥路径,不要照抄以下路径
KeyFile="./conf/accounts/0x9e57448f46c2d7af0920efb2ef8a0e98bc94652c
.pem"
[Chain]
ChainID=1 # chainid
SMCrypto=false # 是否使用国密算法
[log]
Path="./" # 日志路径.pem"

需要注意的是,配置项 keyFIle 应填写上一步中使用 get_account.sh 创建的私钥文 件。

在这里插入图片描述

(6)后端工程准备

代码一

代码文件路径:/root/Desktop/web/DIDApplication/contracts/bcos.go

创建 “bcos.go” 文件,代码如下

package contracts
var (
configPath = "./conf/config.toml"
bcosClient *client.Client
)
func ConnectBcos() error {
   
configs, err := conf.ParseConfigFile(configPath)
if err != nil {
   
return errors.New("解析配置文件错误!")
}
client, err := client.Dial(&configs[0])
if err != nil {
   
return errors.New("连接节点错误!")
}
bcosClient = client
return nil
}
func recorContractdAddress(fileName string, contractAddress string)
error {
   
err := ioutil.WriteFile(fileName, []byte(contractAddress),
0644)
if err != nil {
   
return err
}
return nil
}
func LoadContractAddress(fileName string) string {
   
address, _ := ioutil.ReadFile(fileName)
return string(address)
}
func HexToInt(hexNumber string) int {
   
b, _ := new(big.Int).SetString(hexNumber, 0)
return int(b.Int64())
}
func NewPrivKey() (privateKeyECDSA *ecdsa.PrivateKey,
publicKeyECDSA *ecdsa.PublicKey, account common.Address, err error)
{
   
    privateKeyECDSA, err = crypto.GenerateKey()
if err != nil {
   
return nil, nil, account, err
}
publicKey := privateKeyECDSA.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
if !ok {
   
return privateKeyECDSA, nil, account, errors.New("cannot
assert type: publicKey is not of type *ecdsa.PublicKey")
}
account = crypto.PubkeyToAddress(*publicKeyECDSA)
crypto.SaveECDSA(account.Hex()+".txt", privateKeyECDSA)
return privateKeyECDSA, publicKeyECDSA, account, nil
}
func LoadECPrivateKeyFromtxt(fileName string) (*ecdsa.PrivateKey,
error) {
   
priveKey, err := crypto.LoadECDSA(fileName)
if err != nil {
   
return nil, err
}
return priveKey, nil
}
func ECDSASign(privKeyECDSA *ecdsa.PrivateKey, data []byte)
(signature []byte, err error) {
   
hash := crypto.Keccak256Hash(data)
signature, err = crypto.Sign(hash.Bytes(), privKeyECDSA)
if err != nil {
   
return
}
return
}
func ECDSAVerify(publicKeyECDSA *ecdsa.PublicKey, hash common.Hash,
signature []byte) bo

标签:基于,return,nil,err,--,go,区块,身份,sdk
From: https://blog.csdn.net/2401_84837659/article/details/141128969

相关文章