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  }