我正在尝试编写一个能够定期将数据上传到区块链的程序,例如我办公室的温度。可能吗?实现这一目标最简单的方法是什么?
答案 0 :(得分:3)
应该没有问题,你需要编写自己的链码,它能够接收和更新分类账的温度。此外,要将其与物联网设备连接,您需要开发一些中介应用程序,这些应用程序需要利用其中一个可用的SDK与您的链代码进行交互。
您可以找到Here和您需要实施的链码API。还有一个很好的教程,介绍如何开始使用Hyperledger Fabric network以及如何Write Your First Application。
还有一个repository,其中包含一些示例应用程序,让您了解如何使用NodeJS SDK开发链代码并与应用程序进行交互。
以下是您的链代码可能如下所示的非常原始的示例:
type temperatureSmartContract struct {
}
func (contract *temperatureSmartContract) Init(stub shim.ChaincodeStubInterface) peer.Response {
fmt.Println("Initialize chaincode if needed")
return shim.Success(nil)
}
func (contract *temperatureSmartContract) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
funcName, params := stub.GetFunctionAndParameters()
if funcName == "addTemperature" {
// Store observation into ledger
stub.PutState("temperature", []byte(params[0]))
} else if funcName == "getTemperatures" {
iter, err := stub.GetHistoryForKey("temperature")
if err != nil {
shim.Error(fmt.Sprintf("%s", err))
}
var result []string
for iter.HasNext() {
mod, err := iter.Next()
if err != nil {
shim.Error(fmt.Sprintf("%s", err))
}
result = append(result, string(mod.Value))
}
return shim.Success([]byte(result))
}
return shim.Success(nil)
}
当然,这是捕获定期温度更新到分类帐的非常原始的方法,同时它可以为您提供良好的开端。