Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add smart contract for blockchain #3

Merged
merged 1 commit into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions asset/MessageStorageABI.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
"_format": "hh-sol-artifact-1",
"contractName": "MessageStorage",
"sourceName": "contracts/MessageStorage.sol",
"abi": [
{
"inputs": [],
"name": "getAllMessages",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "userId",
"type": "uint256"
},
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "string",
"name": "data",
"type": "string"
}
],
"internalType": "struct MessageStorage.Message[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_userId",
"type": "uint256"
}
],
"name": "getMessagesByUserId",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "userId",
"type": "uint256"
},
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "string",
"name": "data",
"type": "string"
}
],
"internalType": "struct MessageStorage.Message[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "messages",
"outputs": [
{
"internalType": "uint256",
"name": "userId",
"type": "uint256"
},
{
"internalType": "string",
"name": "message",
"type": "string"
},
{
"internalType": "string",
"name": "data",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_userId",
"type": "uint256"
},
{
"internalType": "string",
"name": "_message",
"type": "string"
},
{
"internalType": "string",
"name": "_data",
"type": "string"
}
],
"name": "storeMessage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50610f63806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d80fefd1461005157806353f5e3801461008357806363ce3f0a146100a1578063f9738b9b146100d1575b600080fd5b61006b60048036038101906100669190610744565b6100ed565b60405161007a93929190610810565b60405180910390f35b61008b610237565b60405161009891906109c7565b60405180910390f35b6100bb60048036038101906100b69190610744565b6103c4565b6040516100c891906109c7565b60405180910390f35b6100eb60048036038101906100e69190610b1e565b610656565b005b600081815481106100fd57600080fd5b906000526020600020906003020160009150905080600001549080600101805461012690610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461015290610bd8565b801561019f5780601f106101745761010080835404028352916020019161019f565b820191906000526020600020905b81548152906001019060200180831161018257829003601f168201915b5050505050908060020180546101b490610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546101e090610bd8565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b5050505050905083565b60606000805480602002602001604051908101604052809291908181526020016000905b828210156103bb57838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461029890610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610bd8565b80156103115780601f106102e657610100808354040283529160200191610311565b820191906000526020600020905b8154815290600101906020018083116102f457829003601f168201915b5050505050815260200160028201805461032a90610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461035690610bd8565b80156103a35780601f10610378576101008083540402835291602001916103a3565b820191906000526020600020905b81548152906001019060200180831161038657829003601f168201915b5050505050815250508152602001906001019061025b565b50505050905090565b60606000805b60008054905081101561041f5783600082815481106103ec576103eb610c09565b5b9060005260206000209060030201600001540361041257818061040e90610c67565b9250505b80806001019150506103ca565b5060008167ffffffffffffffff81111561043c5761043b6109f3565b5b60405190808252806020026020018201604052801561047557816020015b6104626106d9565b81526020019060019003908161045a5790505b5090506000805b60008054905081101561064a57856000828154811061049e5761049d610c09565b5b9060005260206000209060030201600001540361063d57600081815481106104c9576104c8610c09565b5b9060005260206000209060030201604051806060016040529081600082015481526020016001820180546104fc90610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461052890610bd8565b80156105755780601f1061054a57610100808354040283529160200191610575565b820191906000526020600020905b81548152906001019060200180831161055857829003601f168201915b5050505050815260200160028201805461058e90610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90610bd8565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b50505050508152505083838151811061062357610622610c09565b5b6020026020010181905250818061063990610c67565b9250505b808060010191505061047c565b50819350505050919050565b600060405180606001604052808581526020018481526020018381525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010190816106bb9190610e5b565b5060408201518160020190816106d19190610e5b565b505050505050565b60405180606001604052806000815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6107218161070e565b811461072c57600080fd5b50565b60008135905061073e81610718565b92915050565b60006020828403121561075a57610759610704565b5b60006107688482850161072f565b91505092915050565b61077a8161070e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ba57808201518184015260208101905061079f565b60008484015250505050565b6000601f19601f8301169050919050565b60006107e282610780565b6107ec818561078b565b93506107fc81856020860161079c565b610805816107c6565b840191505092915050565b60006060820190506108256000830186610771565b818103602083015261083781856107d7565b9050818103604083015261084b81846107d7565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61088a8161070e565b82525050565b600082825260208201905092915050565b60006108ac82610780565b6108b68185610890565b93506108c681856020860161079c565b6108cf816107c6565b840191505092915050565b60006060830160008301516108f26000860182610881565b506020830151848203602086015261090a82826108a1565b9150506040830151848203604086015261092482826108a1565b9150508091505092915050565b600061093d83836108da565b905092915050565b6000602082019050919050565b600061095d82610855565b6109678185610860565b93508360208202850161097985610871565b8060005b858110156109b557848403895281516109968582610931565b94506109a183610945565b925060208a0199505060018101905061097d565b50829750879550505050505092915050565b600060208201905081810360008301526109e18184610952565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a2b826107c6565b810181811067ffffffffffffffff82111715610a4a57610a496109f3565b5b80604052505050565b6000610a5d6106fa565b9050610a698282610a22565b919050565b600067ffffffffffffffff821115610a8957610a886109f3565b5b610a92826107c6565b9050602081019050919050565b82818337600083830152505050565b6000610ac1610abc84610a6e565b610a53565b905082815260208101848484011115610add57610adc6109ee565b5b610ae8848285610a9f565b509392505050565b600082601f830112610b0557610b046109e9565b5b8135610b15848260208601610aae565b91505092915050565b600080600060608486031215610b3757610b36610704565b5b6000610b458682870161072f565b935050602084013567ffffffffffffffff811115610b6657610b65610709565b5b610b7286828701610af0565b925050604084013567ffffffffffffffff811115610b9357610b92610709565b5b610b9f86828701610af0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610bf057607f821691505b602082108103610c0357610c02610ba9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c728261070e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ca457610ca3610c38565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610d117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cd4565b610d1b8683610cd4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610d58610d53610d4e8461070e565b610d33565b61070e565b9050919050565b6000819050919050565b610d7283610d3d565b610d86610d7e82610d5f565b848454610ce1565b825550505050565b600090565b610d9b610d8e565b610da6818484610d69565b505050565b5b81811015610dca57610dbf600082610d93565b600181019050610dac565b5050565b601f821115610e0f57610de081610caf565b610de984610cc4565b81016020851015610df8578190505b610e0c610e0485610cc4565b830182610dab565b50505b505050565b600082821c905092915050565b6000610e3260001984600802610e14565b1980831691505092915050565b6000610e4b8383610e21565b9150826002028217905092915050565b610e6482610780565b67ffffffffffffffff811115610e7d57610e7c6109f3565b5b610e878254610bd8565b610e92828285610dce565b600060209050601f831160018114610ec55760008415610eb3578287015190505b610ebd8582610e3f565b865550610f25565b601f198416610ed386610caf565b60005b82811015610efb57848901518255600182019150602085019450602081019050610ed6565b86831015610f185784890151610f14601f891682610e21565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220d71cabfa7bc2a965278dfb106ce8e8c45447dd53f92af19eb46e6294633ac0ce64736f6c63430008180033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630d80fefd1461005157806353f5e3801461008357806363ce3f0a146100a1578063f9738b9b146100d1575b600080fd5b61006b60048036038101906100669190610744565b6100ed565b60405161007a93929190610810565b60405180910390f35b61008b610237565b60405161009891906109c7565b60405180910390f35b6100bb60048036038101906100b69190610744565b6103c4565b6040516100c891906109c7565b60405180910390f35b6100eb60048036038101906100e69190610b1e565b610656565b005b600081815481106100fd57600080fd5b906000526020600020906003020160009150905080600001549080600101805461012690610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461015290610bd8565b801561019f5780601f106101745761010080835404028352916020019161019f565b820191906000526020600020905b81548152906001019060200180831161018257829003601f168201915b5050505050908060020180546101b490610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546101e090610bd8565b801561022d5780601f106102025761010080835404028352916020019161022d565b820191906000526020600020905b81548152906001019060200180831161021057829003601f168201915b5050505050905083565b60606000805480602002602001604051908101604052809291908181526020016000905b828210156103bb57838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461029890610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610bd8565b80156103115780601f106102e657610100808354040283529160200191610311565b820191906000526020600020905b8154815290600101906020018083116102f457829003601f168201915b5050505050815260200160028201805461032a90610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461035690610bd8565b80156103a35780601f10610378576101008083540402835291602001916103a3565b820191906000526020600020905b81548152906001019060200180831161038657829003601f168201915b5050505050815250508152602001906001019061025b565b50505050905090565b60606000805b60008054905081101561041f5783600082815481106103ec576103eb610c09565b5b9060005260206000209060030201600001540361041257818061040e90610c67565b9250505b80806001019150506103ca565b5060008167ffffffffffffffff81111561043c5761043b6109f3565b5b60405190808252806020026020018201604052801561047557816020015b6104626106d9565b81526020019060019003908161045a5790505b5090506000805b60008054905081101561064a57856000828154811061049e5761049d610c09565b5b9060005260206000209060030201600001540361063d57600081815481106104c9576104c8610c09565b5b9060005260206000209060030201604051806060016040529081600082015481526020016001820180546104fc90610bd8565b80601f016020809104026020016040519081016040528092919081815260200182805461052890610bd8565b80156105755780601f1061054a57610100808354040283529160200191610575565b820191906000526020600020905b81548152906001019060200180831161055857829003601f168201915b5050505050815260200160028201805461058e90610bd8565b80601f01602080910402602001604051908101604052809291908181526020018280546105ba90610bd8565b80156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b50505050508152505083838151811061062357610622610c09565b5b6020026020010181905250818061063990610c67565b9250505b808060010191505061047c565b50819350505050919050565b600060405180606001604052808581526020018481526020018381525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000015560208201518160010190816106bb9190610e5b565b5060408201518160020190816106d19190610e5b565b505050505050565b60405180606001604052806000815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6107218161070e565b811461072c57600080fd5b50565b60008135905061073e81610718565b92915050565b60006020828403121561075a57610759610704565b5b60006107688482850161072f565b91505092915050565b61077a8161070e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ba57808201518184015260208101905061079f565b60008484015250505050565b6000601f19601f8301169050919050565b60006107e282610780565b6107ec818561078b565b93506107fc81856020860161079c565b610805816107c6565b840191505092915050565b60006060820190506108256000830186610771565b818103602083015261083781856107d7565b9050818103604083015261084b81846107d7565b9050949350505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61088a8161070e565b82525050565b600082825260208201905092915050565b60006108ac82610780565b6108b68185610890565b93506108c681856020860161079c565b6108cf816107c6565b840191505092915050565b60006060830160008301516108f26000860182610881565b506020830151848203602086015261090a82826108a1565b9150506040830151848203604086015261092482826108a1565b9150508091505092915050565b600061093d83836108da565b905092915050565b6000602082019050919050565b600061095d82610855565b6109678185610860565b93508360208202850161097985610871565b8060005b858110156109b557848403895281516109968582610931565b94506109a183610945565b925060208a0199505060018101905061097d565b50829750879550505050505092915050565b600060208201905081810360008301526109e18184610952565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610a2b826107c6565b810181811067ffffffffffffffff82111715610a4a57610a496109f3565b5b80604052505050565b6000610a5d6106fa565b9050610a698282610a22565b919050565b600067ffffffffffffffff821115610a8957610a886109f3565b5b610a92826107c6565b9050602081019050919050565b82818337600083830152505050565b6000610ac1610abc84610a6e565b610a53565b905082815260208101848484011115610add57610adc6109ee565b5b610ae8848285610a9f565b509392505050565b600082601f830112610b0557610b046109e9565b5b8135610b15848260208601610aae565b91505092915050565b600080600060608486031215610b3757610b36610704565b5b6000610b458682870161072f565b935050602084013567ffffffffffffffff811115610b6657610b65610709565b5b610b7286828701610af0565b925050604084013567ffffffffffffffff811115610b9357610b92610709565b5b610b9f86828701610af0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610bf057607f821691505b602082108103610c0357610c02610ba9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c728261070e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610ca457610ca3610c38565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610d117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cd4565b610d1b8683610cd4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610d58610d53610d4e8461070e565b610d33565b61070e565b9050919050565b6000819050919050565b610d7283610d3d565b610d86610d7e82610d5f565b848454610ce1565b825550505050565b600090565b610d9b610d8e565b610da6818484610d69565b505050565b5b81811015610dca57610dbf600082610d93565b600181019050610dac565b5050565b601f821115610e0f57610de081610caf565b610de984610cc4565b81016020851015610df8578190505b610e0c610e0485610cc4565b830182610dab565b50505b505050565b600082821c905092915050565b6000610e3260001984600802610e14565b1980831691505092915050565b6000610e4b8383610e21565b9150826002028217905092915050565b610e6482610780565b67ffffffffffffffff811115610e7d57610e7c6109f3565b5b610e878254610bd8565b610e92828285610dce565b600060209050601f831160018114610ec55760008415610eb3578287015190505b610ebd8582610e3f565b865550610f25565b601f198416610ed386610caf565b60005b82811015610efb57848901518255600182019150602085019450602081019050610ed6565b86831015610f185784890151610f14601f891682610e21565b8355505b6001600288020188555050505b50505050505056fea2646970667358221220d71cabfa7bc2a965278dfb106ce8e8c45447dd53f92af19eb46e6294633ac0ce64736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}
40 changes: 40 additions & 0 deletions contracts/MessageStorage.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract MessageStorage {
struct Message {
uint userId;
string message;
string data;
}

Message[] public messages;

function storeMessage(uint _userId, string memory _message, string memory _data) public {
messages.push(Message(_userId, _message, _data));
}

function getAllMessages() public view returns (Message[] memory) {
return messages;
}

function getMessagesByUserId(uint _userId) public view returns (Message[] memory) {
uint count = 0;
for (uint i = 0; i < messages.length; i++) {
if (messages[i].userId == _userId) {
count++;
}
}

Message[] memory result = new Message[](count);
uint j = 0;
for (uint i = 0; i < messages.length; i++) {
if (messages[i].userId == _userId) {
result[j] = messages[i];
j++;
}
}

return result;
}
}
7 changes: 7 additions & 0 deletions ignition/modules/MessageStorage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const { buildModule } = require('@nomicfoundation/hardhat-ignition/modules');

module.exports = buildModule('MessageStorageModule', (m) => {
const MessageContract = m.contract('MessageStorage');

return { MessageContract };
});