evm_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package vm
  2. import (
  3. "testing"
  4. "github.com/ethereum/go-ethereum/common"
  5. "github.com/ethereum/go-ethereum/params"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestActivePrecompiles(t *testing.T) {
  9. tests := []struct {
  10. name string
  11. evm *EVM
  12. want []common.Address
  13. }{
  14. {
  15. name: "istanbul-plus-quorum-privacy",
  16. evm: &EVM{
  17. chainRules: params.Rules{
  18. IsIstanbul: true,
  19. IsPrivacyPrecompile: true,
  20. },
  21. },
  22. want: []common.Address{
  23. common.BytesToAddress([]byte{1}),
  24. common.BytesToAddress([]byte{2}),
  25. common.BytesToAddress([]byte{3}),
  26. common.BytesToAddress([]byte{4}),
  27. common.BytesToAddress([]byte{5}),
  28. common.BytesToAddress([]byte{6}),
  29. common.BytesToAddress([]byte{7}),
  30. common.BytesToAddress([]byte{8}),
  31. common.BytesToAddress([]byte{9}),
  32. common.QuorumPrivacyPrecompileContractAddress(),
  33. },
  34. },
  35. {
  36. name: "homestead-plus-quorum-privacy",
  37. evm: &EVM{
  38. chainRules: params.Rules{
  39. IsHomestead: true,
  40. IsPrivacyPrecompile: true,
  41. },
  42. },
  43. want: []common.Address{
  44. common.BytesToAddress([]byte{1}),
  45. common.BytesToAddress([]byte{2}),
  46. common.BytesToAddress([]byte{3}),
  47. common.BytesToAddress([]byte{4}),
  48. common.QuorumPrivacyPrecompileContractAddress(),
  49. },
  50. },
  51. {
  52. name: "istanbul",
  53. evm: &EVM{
  54. chainRules: params.Rules{
  55. IsIstanbul: true,
  56. IsPrivacyPrecompile: false,
  57. },
  58. },
  59. want: []common.Address{
  60. common.BytesToAddress([]byte{1}),
  61. common.BytesToAddress([]byte{2}),
  62. common.BytesToAddress([]byte{3}),
  63. common.BytesToAddress([]byte{4}),
  64. common.BytesToAddress([]byte{5}),
  65. common.BytesToAddress([]byte{6}),
  66. common.BytesToAddress([]byte{7}),
  67. common.BytesToAddress([]byte{8}),
  68. common.BytesToAddress([]byte{9}),
  69. },
  70. },
  71. {
  72. name: "homestead",
  73. evm: &EVM{
  74. chainRules: params.Rules{
  75. IsHomestead: true,
  76. IsPrivacyPrecompile: false,
  77. },
  78. },
  79. want: []common.Address{
  80. common.BytesToAddress([]byte{1}),
  81. common.BytesToAddress([]byte{2}),
  82. common.BytesToAddress([]byte{3}),
  83. common.BytesToAddress([]byte{4}),
  84. },
  85. },
  86. }
  87. for _, tt := range tests {
  88. t.Run(tt.name, func(t *testing.T) {
  89. got := ActivePrecompiles(tt.evm.chainRules)
  90. require.ElementsMatchf(t, tt.want, got, "want: %v, got: %v", tt.want, got)
  91. })
  92. }
  93. }