Fix the HardHat decoding bug by adding base URI to _generateSVG() and updating foundry tests
This commit is contained in:
parent
94caa633ff
commit
69de99467f
|
|
@ -59,27 +59,32 @@ contract FleekERC721 is ERC721, FleekAccessControl {
|
||||||
/**
|
/**
|
||||||
* @dev Generates a SVG image.
|
* @dev Generates a SVG image.
|
||||||
*/
|
*/
|
||||||
function _generateSVG(string memory name, string memory ENS) internal pure returns (string memory) {
|
function _generateSVG(string memory name, string memory ENS) internal view returns (string memory) {
|
||||||
return (
|
return (
|
||||||
string(
|
string(
|
||||||
abi.encodePacked(
|
abi.encodePacked(
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">',
|
_baseURI(),
|
||||||
"<defs>",
|
Base64.encode(
|
||||||
"</defs>",
|
abi.encodePacked(
|
||||||
'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >',
|
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">',
|
||||||
'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />',
|
"<defs>",
|
||||||
"</g>",
|
"</defs>",
|
||||||
'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >',
|
'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >',
|
||||||
'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>',
|
'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />',
|
||||||
"</g>",
|
"</g>",
|
||||||
'<g transform="matrix(1 0 0 1 302 261.47)" style="" >',
|
'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >',
|
||||||
'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>',
|
||||||
name,
|
"</g>",
|
||||||
'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
'<g transform="matrix(1 0 0 1 302 261.47)" style="" >',
|
||||||
ENS,
|
'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
||||||
"</tspan></text>",
|
name,
|
||||||
"</g>",
|
'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
||||||
"</svg>"
|
ENS,
|
||||||
|
"</tspan></text>",
|
||||||
|
"</g>",
|
||||||
|
"</svg>"
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ describe('FleekERC721', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return the token URI', async () => {
|
it('should return the token URI', async () => {
|
||||||
/**const { contract } = fixture;
|
const { contract } = fixture;
|
||||||
const tokenURI = await contract.tokenURI(tokenId);
|
const tokenURI = await contract.tokenURI(tokenId);
|
||||||
|
|
||||||
const tokenURIDecoded = Buffer.from(
|
const tokenURIDecoded = Buffer.from(
|
||||||
|
|
@ -149,28 +149,35 @@ describe('FleekERC721', () => {
|
||||||
|
|
||||||
const parsedURI = JSON.parse(tokenURIDecoded);
|
const parsedURI = JSON.parse(tokenURIDecoded);
|
||||||
|
|
||||||
console.log(parsedURI.image);
|
const imageDecoded = Buffer.from(
|
||||||
|
parsedURI.image.replace('data:application/json;base64,', ''),
|
||||||
|
'base64'
|
||||||
|
).toString('ascii');
|
||||||
|
|
||||||
|
parsedURI.image = imageDecoded;
|
||||||
|
|
||||||
expect(parsedURI).to.eql({
|
expect(parsedURI).to.eql({
|
||||||
owner: fixture.owner.address.toLowerCase(),
|
owner: fixture.owner.address.toLowerCase(),
|
||||||
name: MINT_PARAMS.name,
|
name: MINT_PARAMS.name,
|
||||||
description: MINT_PARAMS.description,
|
description: MINT_PARAMS.description,
|
||||||
image: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">'+"<defs>"+
|
image:
|
||||||
+"</defs>"
|
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">' +
|
||||||
+'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >'
|
'<defs>' +
|
||||||
+'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />'
|
'</defs>' +
|
||||||
+"</g>"
|
'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >' +
|
||||||
+'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >'
|
'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />' +
|
||||||
+'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>'
|
'</g>' +
|
||||||
+"</g>"
|
'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >' +
|
||||||
+'<g transform="matrix(1 0 0 1 302 261.47)" style="" >'
|
'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>' +
|
||||||
+'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">'
|
'</g>' +
|
||||||
+MINT_PARAMS.name
|
'<g transform="matrix(1 0 0 1 302 261.47)" style="" >' +
|
||||||
+'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">'
|
'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">' +
|
||||||
+MINT_PARAMS.ens
|
MINT_PARAMS.name +
|
||||||
+"</tspan></text>"
|
'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">' +
|
||||||
+"</g>"
|
MINT_PARAMS.ens +
|
||||||
+"</svg>",
|
'</tspan></text>' +
|
||||||
|
'</g>' +
|
||||||
|
'</svg>',
|
||||||
external_url: MINT_PARAMS.externalUrl,
|
external_url: MINT_PARAMS.externalUrl,
|
||||||
attributes: [
|
attributes: [
|
||||||
{
|
{
|
||||||
|
|
@ -190,7 +197,7 @@ describe('FleekERC721', () => {
|
||||||
value: '0',
|
value: '0',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});**/
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -111,27 +111,32 @@ contract FleekTest is Test {
|
||||||
assertEq(second_mint, 1);
|
assertEq(second_mint, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _generateSVG(string memory name, string memory ENS) internal returns (string memory) {
|
function _generateSVG(string memory name, string memory ENS) internal pure returns (string memory) {
|
||||||
return (
|
return (
|
||||||
string(
|
string(
|
||||||
abi.encodePacked(
|
abi.encodePacked(
|
||||||
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">',
|
"data:application/json;base64,",
|
||||||
"<defs>",
|
Base64.encode(
|
||||||
"</defs>"
|
abi.encodePacked(
|
||||||
'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >',
|
'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="640" height="480" viewBox="0 0 640 480" xml:space="preserve">',
|
||||||
'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />',
|
"<defs>",
|
||||||
"</g>",
|
"</defs>",
|
||||||
'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >',
|
'<g transform="matrix(3.42 0 0 3.42 300.98 252.98)" >',
|
||||||
'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>',
|
'<polygon style="stroke: rgb(0,0,0); stroke-width: 8; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(152,152,183); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" points="-50,-50 -50,50 50,50 50,-50 " />',
|
||||||
"</g>",
|
"</g>",
|
||||||
'<g transform="matrix(1 0 0 1 302 261.47)" style="" >',
|
'<g transform="matrix(1 0 0 1 303.5 115.67)" style="" >',
|
||||||
'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
'<text xml:space="preserve" font-family="Open Sans" font-size="24" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-45.7" y="5.65" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">Fleek NFAs</tspan></text>',
|
||||||
name,
|
"</g>",
|
||||||
'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
'<g transform="matrix(1 0 0 1 302 261.47)" style="" >',
|
||||||
ENS,
|
'<text xml:space="preserve" font-family="Open Sans" font-size="28" font-style="normal" font-weight="normal" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;" ><tspan x="-44.26" y="-6.14" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
||||||
"</tspan></text>",
|
name,
|
||||||
"</g>",
|
'</tspan><tspan x="-37.14" y="17.45" style="stroke-width: 1; font-family: "Open Sans", sans-serif; font-size: 18px; font-style: normal; font-weight: normal; fill: rgb(0,0,0); ">',
|
||||||
"</svg>"
|
ENS,
|
||||||
|
"</tspan></text>",
|
||||||
|
"</g>",
|
||||||
|
"</svg>"
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue