Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 23
    • Issues 23
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #1196

Closed
Open
Opened Sep 23, 2024 by 卡点怪@kadianguai

长安链智能合约

我自己在长安链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吗?

Edited Sep 23, 2024 by 卡点怪
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#1196

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。