Skip to content

Commit 013de5f

Browse files
committed
update smart contract code, explanation
1 parent 1c7dbf7 commit 013de5f

File tree

2 files changed

+36
-43
lines changed

2 files changed

+36
-43
lines changed

src/components/CodeBlock.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22

33
const CodeBlock = ({ code }) => {
44
return (
5-
<div className="bg-gray-800 text-green-400 text-sm p-4 rounded-md overflow-x-auto shadow-md">
5+
<div className="bg-gray-800 text-green-300 text-sm p-4 rounded-md overflow-x-auto shadow-md">
66
<pre>
77
<code>{code}</code>
88
</pre>

src/components/SmartContracts.js

Lines changed: 35 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,26 @@ import {
1010
} from "react-icons/fa";
1111
import CodeBlock from "./CodeBlock";
1212

13-
const solidityCode = `/// @notice Purchase an access key for the STAC collection
14-
function purchaseAccess() external payable returns (string memory) {
15-
require(msg.value == keyPrice, "Incorrect amount sent");
16-
require(bytes(accessKeys[msg.sender]).length == 0,
17-
"You already have access");
13+
const solidityCode = `/// @notice Purchase an access code for the STAC collection
14+
/// @return accessCode The generated access code
15+
function purchaseAccessCode() external payable returns (string memory) {
16+
require(msg.value == accessPrice, "Incorrect payment amount");
17+
require(!hasPurchased[msg.sender], "Access already purchased");
1818
19-
// Generate a unique access key
20-
string memory accessKey = generateAccessKey(msg.sender);
21-
accessKeys[msg.sender] = accessKey;
22-
validKeys[accessKey] = true;
19+
// Generate a unique access code
20+
string memory accessCode = _generateAccessCode(msg.sender);
2321
24-
// Emit event to notify external services
25-
emit KeyPurchased(msg.sender, accessKey);
22+
// Hash and store the access code
23+
accessRecords[msg.sender] = AccessData({
24+
hashedCode: keccak256(abi.encodePacked(accessCode)),
25+
expiryTime: block.timestamp + defaultValidityPeriod
26+
});
27+
hasPurchased[msg.sender] = true;
2628
27-
return accessKey;
29+
// Emit event to notify external systems
30+
emit AccessCodeGenerated(msg.sender, accessRecords[msg.sender].expiryTime);
31+
32+
return accessCode;
2833
}`;
2934

3035
const SmartContractsSection = ({ className }) => {
@@ -172,44 +177,32 @@ const SmartContractsSection = ({ className }) => {
172177
<h3 className="flex items-center text-2xl font-bold mb-4 bg-gray-100 text-black px-3 py-1 rounded-md border-1 border-gray-400 hover:bg-gray-300 transition-colors duration-300 shadow">
173178
Smart Contracts in stacchain
174179
</h3>
180+
<CodeBlock code={solidityCode} />
181+
<br />
175182
<p className="text-md leading-relaxed mb-4">
176183
This Solidity code demonstrates how users can securely purchase
177-
access keys for a STAC collection using blockchain technology.
178-
It ensures secure payments, generates unique keys, and prevents
179-
duplicate purchases.
184+
access codes for a STAC collection using blockchain technology.
185+
It ensures secure payments, generates unique user-specific
186+
codes, and prevents duplicate purchases by tying each code to
187+
the user’s wallet address.
180188
</p>
181189
<p className="text-md leading-relaxed mb-4">
182-
Additionally, it emits an event (`KeyPurchased`) to notify
183-
external systems about the purchase. This is essential for
184-
tracking access keys off-chain and integrating with external
185-
tools like databases or APIs.
190+
The contract emits events such as{" "}
191+
<code>AccessCodeGenerated</code> and{" "}
192+
<code>AccessCodeRevoked</code> to notify external systems about
193+
purchases and revocations. These events facilitate seamless
194+
integration with APIs, databases, or other external tools to
195+
track and validate access.
196+
</p>
197+
<p className="text-md leading-relaxed mb-4">
198+
It also supports time-limited validity for access codes,
199+
balancing user convenience and security. The actual codes are
200+
not stored on-chain; instead, only their cryptographic hashes
201+
are stored for validation.
186202
</p>
187-
<CodeBlock code={solidityCode} />
188203
</div>
189204
</div>
190205
</div>
191-
192-
{/* Call to Action */}
193-
{/* <div className="bg-white p-6 rounded-md shadow-md mt-10">
194-
<h3
195-
id="get-involved"
196-
className="flex items-center text-2xl font-bold mb-4 bg-gray-100 text-black px-3 py-1 rounded-md border-1 border-gray-400 hover:bg-gray-300 transition-colors duration-300 shadow"
197-
>
198-
<FaHandsHelping className="mr-2 text-green-400" />
199-
Get Involved
200-
</h3>
201-
<p className="text-lg leading-relaxed mb-4">
202-
We invite developers and blockchain enthusiasts to contribute to our
203-
platform. Your participation can help us enhance the functionality
204-
and security of our ecosystem.
205-
</p>
206-
<a
207-
href="https://github.com/stacchain"
208-
className="inline-block px-6 py-3 bg-green-500 text-white font-semibold rounded-md hover:bg-green-600 transition-colors duration-300"
209-
>
210-
Join Our Community
211-
</a>
212-
</div> */}
213206
</div>
214207
</section>
215208
);

0 commit comments

Comments
 (0)