github.com/ethereum-optimism/optimism@v1.7.2/packages/contracts-bedrock/test/periphery/op-nft/AttestationStation.t.sol (about) 1 //SPDX-License-Identifier: MIT 2 pragma solidity 0.8.15; 3 4 /* Testing utilities */ 5 import { Test } from "forge-std/Test.sol"; 6 import { AttestationStation } from "src/periphery/op-nft/AttestationStation.sol"; 7 8 contract AttestationStation_Initializer is Test { 9 address alice_attestor = address(128); 10 address bob = address(256); 11 address sally = address(512); 12 13 function setUp() public { 14 // Give alice and bob some ETH 15 vm.deal(alice_attestor, 1 ether); 16 17 vm.label(alice_attestor, "alice_attestor"); 18 vm.label(bob, "bob"); 19 vm.label(sally, "sally"); 20 } 21 } 22 23 contract AttestationStationTest is AttestationStation_Initializer { 24 event AttestationCreated(address indexed creator, address indexed about, bytes32 indexed key, bytes val); 25 26 function test_attest_individual_succeeds() external { 27 AttestationStation attestationStation = new AttestationStation(); 28 29 vm.expectEmit(true, true, true, true); 30 emit AttestationCreated(alice_attestor, bob, bytes32("foo"), bytes("bar")); 31 32 vm.prank(alice_attestor); 33 attestationStation.attest({ _about: bob, _key: bytes32("foo"), _val: bytes("bar") }); 34 } 35 36 function test_attest_single_succeeds() external { 37 AttestationStation attestationStation = new AttestationStation(); 38 39 AttestationStation.AttestationData[] memory attestationDataArr = new AttestationStation.AttestationData[](1); 40 41 // alice is going to attest about bob 42 AttestationStation.AttestationData memory attestationData = AttestationStation.AttestationData({ 43 about: bob, 44 key: bytes32("test-key:string"), 45 val: bytes("test-value") 46 }); 47 48 // assert the attestation starts empty 49 assertEq(attestationStation.attestations(alice_attestor, attestationData.about, attestationData.key), ""); 50 51 // make attestation 52 vm.prank(alice_attestor); 53 attestationDataArr[0] = attestationData; 54 attestationStation.attest(attestationDataArr); 55 56 // assert the attestation is there 57 assertEq( 58 attestationStation.attestations(alice_attestor, attestationData.about, attestationData.key), 59 attestationData.val 60 ); 61 62 bytes memory new_val = bytes("new updated value"); 63 // make a new attestations to same about and key 64 attestationData = 65 AttestationStation.AttestationData({ about: attestationData.about, key: attestationData.key, val: new_val }); 66 67 vm.prank(alice_attestor); 68 attestationDataArr[0] = attestationData; 69 attestationStation.attest(attestationDataArr); 70 71 // assert the attestation is updated 72 assertEq( 73 attestationStation.attestations(alice_attestor, attestationData.about, attestationData.key), 74 attestationData.val 75 ); 76 } 77 78 function test_attest_bulk_succeeds() external { 79 AttestationStation attestationStation = new AttestationStation(); 80 81 vm.prank(alice_attestor); 82 83 AttestationStation.AttestationData[] memory attestationData = new AttestationStation.AttestationData[](3); 84 attestationData[0] = AttestationStation.AttestationData({ 85 about: bob, 86 key: bytes32("test-key:string"), 87 val: bytes("test-value") 88 }); 89 90 attestationData[1] = 91 AttestationStation.AttestationData({ about: bob, key: bytes32("test-key2"), val: bytes("test-value2") }); 92 93 attestationData[2] = AttestationStation.AttestationData({ 94 about: sally, 95 key: bytes32("test-key:string"), 96 val: bytes("test-value3") 97 }); 98 99 attestationStation.attest(attestationData); 100 101 // assert the attestations are there 102 assertEq( 103 attestationStation.attestations(alice_attestor, attestationData[0].about, attestationData[0].key), 104 attestationData[0].val 105 ); 106 assertEq( 107 attestationStation.attestations(alice_attestor, attestationData[1].about, attestationData[1].key), 108 attestationData[1].val 109 ); 110 assertEq( 111 attestationStation.attestations(alice_attestor, attestationData[2].about, attestationData[2].key), 112 attestationData[2].val 113 ); 114 } 115 }