长安链智能合约
我自己在长安链ide里编译一个求平均值的智能合约时,遇到了/data/gopath230/pkg/mod/golang.org/x/crypto@v0.27.0/curve25519/curve25519.go:13:8: package crypto/ecdh is not in GOROOT (/data/go230copy/src/crypto/ecdh)错误。我的代码具体如下(我的版本为2.3.0):
package main
import ( "chainmaker/pb/protogo" "chainmaker/sdk" "encoding/json" "errors" "fmt" "log" "strconv" "strings" )
// AverageContract 实现存储和计算平均值的合约 type AverageContract struct { contract.Contract }
// InitContract 初始化合约 func (a *AverageContract) InitContract() error { return nil }
// StoreNumbers 存储一组整数到合约状态 func (a *AverageContract) StoreNumbers(numbers []int) error { // 将整数数组转换为字符串,以逗号分隔 numbersStr := "" for _, num := range numbers { numbersStr += strconv.Itoa(num) + "," } // 存储字符串到合约状态 err := contract.PutState([]byte("numbers"), []byte(numbersStr)) if err != nil { return err } return nil }
// CalculateAverage 读取存储的整数并计算平均值 func (a *AverageContract) CalculateAverage() (int, error) { // 从状态中获取存储的整数 numbersBytes, err := contract.GetState([]byte("numbers")) if err != nil { return 0, errors.New("failed to get numbers from state") } if numbersBytes == nil { return 0, errors.New("no numbers stored") }
numbersStr := string(numbersBytes)
if numbersStr == "" {
return 0, errors.New("no numbers stored")
}
// 将字符串转换回整数数组
var numbers []int
for _, numStr := range strings.Split(numbersStr, ",") {
if numStr != "" { // 跳过空字符串
num, err := strconv.Atoi(numStr)
if err != nil {
return 0, err
}
numbers = append(numbers, num)
}
}
if len(numbers) == 0 {
return 0, errors.New("no valid numbers to calculate average")
}
// 计算平均值
sum := 0
for _, num := range numbers {
sum += num
}
average := sum / len(numbers)
return average, nil
}
func main() { // 启动合约 err := contract.Serve(new(AverageContract)) if err != nil { panic(err) } } 烦请您帮忙,并且可以的话,可以给我一个求平均值的智能合约的demo吗?