将上链GET改成POST

This commit is contained in:
闵宪瑞 2025-05-21 14:56:15 +08:00
parent 608463ba0a
commit af460222ce
7 changed files with 64 additions and 16 deletions

View File

@ -47,7 +47,7 @@ go run main.go
现在您可以访问以下API端点
- **设置键值对**:
- 方法: `POST /set?key=<key>&value=<value>`
- 方法: `GET /set?key=<key>&value=<value>`
- 示例: `curl "http://localhost:8080/set?key=1&value=HelloWorld"`
- **读取键对应的值**:

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{
"_format": "hh-sol-dbg-1",
"buildInfo": "..\\..\\build-info\\552918350d568d854c4204b36ba87832.json"
"buildInfo": "..\\..\\build-info\\91b748183a07fa13d3d4b0e76244d4ad.json"
}

View File

@ -41,8 +41,8 @@
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50610505806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063643719771461003b5780639507d39a14610057575b600080fd5b6100556004803603810190610050919061029f565b610087565b005b610071600480360381019061006c9190610276565b6100b2565b60405161007e919061032c565b60405180910390f35b8060008084815260200190815260200160002090805190602001906100ad929190610156565b505050565b606060008083815260200190815260200160002080546100d190610417565b80601f01602080910402602001604051908101604052809291908181526020018280546100fd90610417565b801561014a5780601f1061011f5761010080835404028352916020019161014a565b820191906000526020600020905b81548152906001019060200180831161012d57829003601f168201915b50505050509050919050565b82805461016290610417565b90600052602060002090601f01602090048101928261018457600085556101cb565b82601f1061019d57805160ff19168380011785556101cb565b828001600101855582156101cb579182015b828111156101ca5782518255916020019190600101906101af565b5b5090506101d891906101dc565b5090565b5b808211156101f55760008160009055506001016101dd565b5090565b600061020c6102078461037f565b61034e565b90508281526020810184848401111561022457600080fd5b61022f8482856103d5565b509392505050565b600082601f83011261024857600080fd5b81356102588482602086016101f9565b91505092915050565b600081359050610270816104b8565b92915050565b60006020828403121561028857600080fd5b600061029684828501610261565b91505092915050565b600080604083850312156102b257600080fd5b60006102c085828601610261565b925050602083013567ffffffffffffffff8111156102dd57600080fd5b6102e985828601610237565b9150509250929050565b60006102fe826103af565b61030881856103ba565b93506103188185602086016103e4565b610321816104a7565b840191505092915050565b6000602082019050818103600083015261034681846102f3565b905092915050565b6000604051905081810181811067ffffffffffffffff8211171561037557610374610478565b5b8060405250919050565b600067ffffffffffffffff82111561039a57610399610478565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b82818337600083830152505050565b60005b838110156104025780820151818401526020810190506103e7565b83811115610411576000848401525b50505050565b6000600282049050600182168061042f57607f821691505b6020821081141561044357610442610449565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6104c1816103cb565b81146104cc57600080fd5b5056fea26469706673582212206d7f7833d0a950b507d6b35ebca1baa126b3b5ef764b1cc224cac6e695550b1e64736f6c63430008000033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063643719771461003b5780639507d39a14610057575b600080fd5b6100556004803603810190610050919061029f565b610087565b005b610071600480360381019061006c9190610276565b6100b2565b60405161007e919061032c565b60405180910390f35b8060008084815260200190815260200160002090805190602001906100ad929190610156565b505050565b606060008083815260200190815260200160002080546100d190610417565b80601f01602080910402602001604051908101604052809291908181526020018280546100fd90610417565b801561014a5780601f1061011f5761010080835404028352916020019161014a565b820191906000526020600020905b81548152906001019060200180831161012d57829003601f168201915b50505050509050919050565b82805461016290610417565b90600052602060002090601f01602090048101928261018457600085556101cb565b82601f1061019d57805160ff19168380011785556101cb565b828001600101855582156101cb579182015b828111156101ca5782518255916020019190600101906101af565b5b5090506101d891906101dc565b5090565b5b808211156101f55760008160009055506001016101dd565b5090565b600061020c6102078461037f565b61034e565b90508281526020810184848401111561022457600080fd5b61022f8482856103d5565b509392505050565b600082601f83011261024857600080fd5b81356102588482602086016101f9565b91505092915050565b600081359050610270816104b8565b92915050565b60006020828403121561028857600080fd5b600061029684828501610261565b91505092915050565b600080604083850312156102b257600080fd5b60006102c085828601610261565b925050602083013567ffffffffffffffff8111156102dd57600080fd5b6102e985828601610237565b9150509250929050565b60006102fe826103af565b61030881856103ba565b93506103188185602086016103e4565b610321816104a7565b840191505092915050565b6000602082019050818103600083015261034681846102f3565b905092915050565b6000604051905081810181811067ffffffffffffffff8211171561037557610374610478565b5b8060405250919050565b600067ffffffffffffffff82111561039a57610399610478565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b82818337600083830152505050565b60005b838110156104025780820151818401526020810190506103e7565b83811115610411576000848401525b50505050565b6000600282049050600182168061042f57607f821691505b6020821081141561044357610442610449565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6104c1816103cb565b81146104cc57600080fd5b5056fea26469706673582212206d7f7833d0a950b507d6b35ebca1baa126b3b5ef764b1cc224cac6e695550b1e64736f6c63430008000033",
"bytecode": "0x608060405234801561001057600080fd5b50610505806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063643719771461003b5780639507d39a14610057575b600080fd5b6100556004803603810190610050919061029f565b610087565b005b610071600480360381019061006c9190610276565b6100b2565b60405161007e919061032c565b60405180910390f35b8060008084815260200190815260200160002090805190602001906100ad929190610156565b505050565b606060008083815260200190815260200160002080546100d190610417565b80601f01602080910402602001604051908101604052809291908181526020018280546100fd90610417565b801561014a5780601f1061011f5761010080835404028352916020019161014a565b820191906000526020600020905b81548152906001019060200180831161012d57829003601f168201915b50505050509050919050565b82805461016290610417565b90600052602060002090601f01602090048101928261018457600085556101cb565b82601f1061019d57805160ff19168380011785556101cb565b828001600101855582156101cb579182015b828111156101ca5782518255916020019190600101906101af565b5b5090506101d891906101dc565b5090565b5b808211156101f55760008160009055506001016101dd565b5090565b600061020c6102078461037f565b61034e565b90508281526020810184848401111561022457600080fd5b61022f8482856103d5565b509392505050565b600082601f83011261024857600080fd5b81356102588482602086016101f9565b91505092915050565b600081359050610270816104b8565b92915050565b60006020828403121561028857600080fd5b600061029684828501610261565b91505092915050565b600080604083850312156102b257600080fd5b60006102c085828601610261565b925050602083013567ffffffffffffffff8111156102dd57600080fd5b6102e985828601610237565b9150509250929050565b60006102fe826103af565b61030881856103ba565b93506103188185602086016103e4565b610321816104a7565b840191505092915050565b6000602082019050818103600083015261034681846102f3565b905092915050565b6000604051905081810181811067ffffffffffffffff8211171561037557610374610478565b5b8060405250919050565b600067ffffffffffffffff82111561039a57610399610478565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b82818337600083830152505050565b60005b838110156104025780820151818401526020810190506103e7565b83811115610411576000848401525b50505050565b6000600282049050600182168061042f57607f821691505b6020821081141561044357610442610449565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6104c1816103cb565b81146104cc57600080fd5b5056fea26469706673582212209a91262e849c6fd96aafc8ac34828e0be593bf3f8ec7cc5c80dcfe2ca63cb00e64736f6c63430008000033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063643719771461003b5780639507d39a14610057575b600080fd5b6100556004803603810190610050919061029f565b610087565b005b610071600480360381019061006c9190610276565b6100b2565b60405161007e919061032c565b60405180910390f35b8060008084815260200190815260200160002090805190602001906100ad929190610156565b505050565b606060008083815260200190815260200160002080546100d190610417565b80601f01602080910402602001604051908101604052809291908181526020018280546100fd90610417565b801561014a5780601f1061011f5761010080835404028352916020019161014a565b820191906000526020600020905b81548152906001019060200180831161012d57829003601f168201915b50505050509050919050565b82805461016290610417565b90600052602060002090601f01602090048101928261018457600085556101cb565b82601f1061019d57805160ff19168380011785556101cb565b828001600101855582156101cb579182015b828111156101ca5782518255916020019190600101906101af565b5b5090506101d891906101dc565b5090565b5b808211156101f55760008160009055506001016101dd565b5090565b600061020c6102078461037f565b61034e565b90508281526020810184848401111561022457600080fd5b61022f8482856103d5565b509392505050565b600082601f83011261024857600080fd5b81356102588482602086016101f9565b91505092915050565b600081359050610270816104b8565b92915050565b60006020828403121561028857600080fd5b600061029684828501610261565b91505092915050565b600080604083850312156102b257600080fd5b60006102c085828601610261565b925050602083013567ffffffffffffffff8111156102dd57600080fd5b6102e985828601610237565b9150509250929050565b60006102fe826103af565b61030881856103ba565b93506103188185602086016103e4565b610321816104a7565b840191505092915050565b6000602082019050818103600083015261034681846102f3565b905092915050565b6000604051905081810181811067ffffffffffffffff8211171561037557610374610478565b5b8060405250919050565b600067ffffffffffffffff82111561039a57610399610478565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050919050565b82818337600083830152505050565b60005b838110156104025780820151818401526020810190506103e7565b83811115610411576000848401525b50505050565b6000600282049050600182168061042f57607f821691505b6020821081141561044357610442610449565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6104c1816103cb565b81146104cc57600080fd5b5056fea26469706673582212209a91262e849c6fd96aafc8ac34828e0be593bf3f8ec7cc5c80dcfe2ca63cb00e64736f6c63430008000033",
"linkReferences": {},
"deployedLinkReferences": {}
}

View File

@ -35,6 +35,41 @@
"artifacts": [
"SimpleStorage"
]
},
"D:\\202505\\block\\contracts\\SimpleStorage.sol": {
"lastModificationDate": 1747806005792,
"contentHash": "a252f90e96ba8ded10bc56e5f9b7d50d",
"sourceName": "contracts/SimpleStorage.sol",
"solcConfig": {
"version": "0.8.0",
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"abi",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"metadata"
],
"": [
"ast"
]
}
}
}
},
"imports": [],
"versionPragmas": [
"^0.8.0"
],
"artifacts": [
"SimpleStorage"
]
}
}
}

34
main.go
View File

@ -25,7 +25,9 @@ type SimpleStorage struct {
contract *bind.BoundContract
abi abi.ABI
}
type Config struct {
PrivateKey string `json:"privateKey"`
}
type Response struct {
Msg string `json:"msg"`
Data interface{} `json:"data"`
@ -82,10 +84,6 @@ var (
privateKey string
)
type Config struct {
PrivateKey string `json:"privateKey"`
}
func loadConfig(configPath string) (*Config, error) {
data, err := ioutil.ReadFile(configPath)
if err != nil {
@ -101,10 +99,24 @@ func loadConfig(configPath string) (*Config, error) {
func setHandler(client *ethclient.Client, storage *SimpleStorage, privateKeyECDSA *ecdsa.PrivateKey) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
keyStr := r.URL.Query().Get("key")
value := r.URL.Query().Get("value")
// 确保是 POST 请求
if r.Method != http.MethodPost {
writeResponse(w, &Response{Msg: "error", Data: "只接受 POST 请求"})
return
}
keyUint, err := strconv.ParseUint(keyStr, 10, 64)
// 解析 JSON 请求体
var requestData struct {
Key string `json:"key"`
Value string `json:"value"`
}
if err := json.NewDecoder(r.Body).Decode(&requestData); err != nil {
writeResponse(w, &Response{Msg: "error", Data: "无效的请求数据"})
return
}
keyUint, err := strconv.ParseUint(requestData.Key, 10, 64)
if err != nil {
writeResponse(w, &Response{Msg: "error", Data: "无效的键值类型,必须为整数"})
return
@ -125,16 +137,17 @@ func setHandler(client *ethclient.Client, storage *SimpleStorage, privateKeyECDS
bigKey := big.NewInt(0).SetUint64(keyUint)
tx, err := storage.Transact(auth, "set", bigKey, value)
tx, err := storage.Transact(auth, "set", bigKey, requestData.Value)
if err != nil {
writeResponse(w, &Response{Msg: "error", Data: fmt.Sprintf("设置值失败: %v", err)})
return
}
// 控制台日志打印
log.Printf("成功发起交易Hash: %s键: %d值: %s", tx.Hash().Hex(), keyUint, requestData.Value)
writeResponse(w, &Response{Msg: "ok", Data: tx.Hash().Hex()})
}
}
func getHandler(storage *SimpleStorage) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
keyStr := r.URL.Query().Get("key")
@ -142,7 +155,6 @@ func getHandler(storage *SimpleStorage) http.HandlerFunc {
writeResponse(w, &Response{Msg: "error", Data: "缺少键值"})
return
}
keyUint, err := strconv.ParseUint(keyStr, 10, 64)
if err != nil {
writeResponse(w, &Response{Msg: "error", Data: "无效的键值类型,必须为整数"})

2
package-lock.json generated
View File

@ -2291,6 +2291,7 @@
"integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"dependencies": {
"node-gyp-build": "4.3.0"
},
@ -2303,6 +2304,7 @@
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz",
"integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==",
"dev": true,
"optional": true,
"bin": {
"node-gyp-build": "bin.js",
"node-gyp-build-optional": "optional.js",