0

我正在关注链码开发指南:https ://github.com/hyperledger/fabric/blob/07ea01124b2768ee04a6b30fe29a6395f6d3d819/docs/API/SandboxSetup.md

以我的测试结果,在生产环境(不是开发环境,不是 --peer-chaincodedev ),部署方法的工作负载(例如系统运行时间和存储大小)远高于调用方法。

如果测试结果是正确的,我想部署方法的成本要比调用方法高得多。超过 1,000,000 倍的成本。

在这样的成本情况下,我们应该做什么样的设计?频率如何合适。

例如,我们应该如何避免调用部署方法?我们应该如何使用调用方法来替换部署方法?

4

1 回答 1

1
  1. 部署一次,链代码名称是更好的业务名称,而不是您的流程名称。

func (t *Chaincode) Init(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	var err error
	var Number string
	if len(args) != 1 {return nil, errors.New("sign Init Expecting 1 number of arguments.")}
	Number = args[0]
	err = stub.PutState(Number, []byte("01"))
	if err != nil {return nil, err}

	return nil, nil
}

  1. 使用调用方法来避免新链码的部署方法。

func (t *Chaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	if function == "delete" {
		// Deletes an entity from its state
		return t.delete(stub, args)
	}
	
	if function == "newcontract" {
		// Deletes an entity from its state
		return t.delete(stub, args)
	}
	
	xxxxxxxxxxxxxxxxxxxx
	return nil, nil
}

func (t *SimpleChaincode) Query(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) {
	if function != "query" {
		return nil, errors.New("Invalid query function name. Expecting \"query\"")
	}
	
	xxxxxxxxxxxxxxxxxxxx
	return xxx, nil
}

// Deletes an entity from state

func (t *SimpleChaincode) delete(stub *shim.ChaincodeStub, args []string) ([]byte, error) {
	if len(args) != 1 {
		return nil, errors.New("Incorrect number of arguments. Expecting 1")
	}

	A := args[0]

	// Delete the key from the state in ledger
	err := stub.DelState(A)
	if err != nil {
		return nil, errors.New("Failed to delete state")
	}

	return nil, nil
}

于 2016-06-01T15:43:16.210 回答