Skip to content

Commit

Permalink
address Serhii comments
Browse files Browse the repository at this point in the history
  • Loading branch information
ailisp committed Nov 8, 2024
1 parent d5ca01a commit 60ed9ca
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 42 deletions.
15 changes: 14 additions & 1 deletion chain-signatures/contract-eth/contracts/ChainSignatures.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ contract ChainSignatures {
struct SignRequest {
bytes32 payload;
string path;
uint32 keyVersion;
}

struct SignatureRequest {
Expand Down Expand Up @@ -76,7 +77,19 @@ contract ChainSignatures {
return epsilon;
}

function sign(bytes32 payload, string memory path) external payable returns (bytes32) {
function latestKeyVersion() public pure returns (uint32) {
return 0;
}

function sign(SignRequest memory _request) external payable returns (bytes32) {
bytes32 payload = _request.payload;
string memory path = _request.path;
uint32 keyVersion = _request.keyVersion;

if (keyVersion > latestKeyVersion()) {
revert("This key version is not supported. Call latest_key_version() to get the latest supported version.");
}

uint256 requiredDeposit = getSignatureDeposit();
require(msg.value >= requiredDeposit, "Insufficient deposit");

Expand Down
2 changes: 1 addition & 1 deletion chain-signatures/contract-eth/scripts/sign.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ async function main() {
const signer = (await hre.ethers.getSigners())[1];
const chainSignaturesWithSigner = chainSignatures.connect(signer);

const tx = await chainSignaturesWithSigner.sign(testMessage, testPath, {
const tx = await chainSignaturesWithSigner.sign({payload: testMessage, path: testPath, keyVersion: 0}, {
value: signatureDeposit
});
const receipt = await tx.wait();
Expand Down
29 changes: 0 additions & 29 deletions chain-signatures/contract-eth/scripts/watch-events.js

This file was deleted.

21 changes: 10 additions & 11 deletions chain-signatures/contract-eth/test/ChainSignatures.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ describe("ChainSignatures", function () {
ChainSignatures = await ethers.getContractFactory("ChainSignatures");
publicKey = { x: xHex, y: yHex };
chainSignatures = await ChainSignatures.deploy(publicKey);
// await chainSignatures.deployed();
});

describe("deriveEpsilon", function () {
Expand Down Expand Up @@ -96,36 +95,36 @@ describe("ChainSignatures", function () {

describe("Signing requests", function () {
it("Should create a signature request", async function () {
const payloadHash = ethers.keccak256(ethers.toUtf8Bytes("Test payload"));
const payload = ethers.keccak256(ethers.toUtf8Bytes("Test payload"));
const path = "test/path";
const requiredDeposit = await chainSignatures.getSignatureDeposit();
const epsilon = await chainSignatures.deriveEpsilon(path, addr1.address);
const requestId =
ethers.solidityPackedKeccak256(
["bytes32", "address", "string"],
[payloadHash, addr1.address, path]
[payload, addr1.address, path]
);

await expect(chainSignatures.connect(addr1).sign(payloadHash, path, { value: requiredDeposit }))
await expect(chainSignatures.connect(addr1).sign({payload, path, keyVersion: 0}, { value: requiredDeposit }))
.to.emit(chainSignatures, "SignatureRequested")
.withArgs(requestId, addr1.address, epsilon, payloadHash, path);
.withArgs(requestId, addr1.address, epsilon, payload, path);
});

it("Should not allow creating a request with insufficient deposit", async function () {
const payloadHash = ethers.keccak256(ethers.toUtf8Bytes("Test payload"));
const payload = ethers.keccak256(ethers.toUtf8Bytes("Test payload"));
const path = "test/path";
const requiredDeposit = await chainSignatures.getSignatureDeposit();

await expect(chainSignatures.connect(addr1).sign(payloadHash, path, { value: requiredDeposit - 1n }))
await expect(chainSignatures.connect(addr1).sign({payload, path, keyVersion: 0}, { value: requiredDeposit - 1n }))
.to.be.revertedWith("Insufficient deposit");
});

it("Respond to a signature request", async function () {
const payloadHash = "0xB94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9"
const payload = "0xB94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9"
const path = "test";
const requiredDeposit = await chainSignatures.getSignatureDeposit();

const tx = await chainSignatures.connect(addr1).sign(payloadHash, path, { value: requiredDeposit });
const tx = await chainSignatures.connect(addr1).sign({payload, path, keyVersion: 0}, { value: requiredDeposit });
const receipt = await tx.wait();
console.log(receipt)
const requestId = receipt.logs[0].args[0];
Expand Down Expand Up @@ -164,10 +163,10 @@ describe("ChainSignatures", function () {
expect(await chainSignatures.getSignatureDeposit()).to.equal(1);

for (let i = 0; i < 4; i++) {
const payloadHash = ethers.keccak256(ethers.toUtf8Bytes(`Test payload ${i}`));
const payload = ethers.keccak256(ethers.toUtf8Bytes(`Test payload ${i}`));
const path = `test/path/${i}`;
const requiredDeposit = await chainSignatures.getSignatureDeposit();
await chainSignatures.connect(addr1).sign(payloadHash, path, { value: requiredDeposit });
await chainSignatures.connect(addr1).sign({payload, path, keyVersion: 0}, { value: requiredDeposit });
}

expect(await chainSignatures.getSignatureDeposit()).to.equal(ethers.parseEther("0.004"));
Expand Down

0 comments on commit 60ed9ca

Please sign in to comment.